рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛: рдЖрдВрддрд░рд┐рдХ рдирдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ
рд╣рдо рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦрд╛ рдерд╛ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЕрдЪреНрдЫреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЙрд╕реА рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рдВрд╡рджрдВрддрд┐рдпреЛрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рддреБрд░рдВрдд рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рддреЗ рд╣реИрдВ "рдареАрдХ рд╣реИ, рдЕрдм рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд░реВрдВрдЧрд╛, рдореИрдВ рд╕реНрдорд╛рд░реНрдЯ рд╣реВрдВ рдФрд░ рдореИрдВ рдореИрдХрдХреЙрдиреЗрд▓ рд╣реВрдВред"

рдРрд╕рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрд░реА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рд╣реБрдЖред рдПрдХ рдФрд░ рдПрдХред рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рд╣рд░ рдкрдВрдХреНрддрд┐ рдХрд╛ рдореИрдВ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред рддрджрдиреБрд╕рд╛рд░, рди рдХреЗрд╡рд▓ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдмрд▓реНрдХрд┐ рдореБрдЭреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдХрд░рдирд╛ рдерд╛ред "рд╕рд╣реА" рдореЗрдВ рд╕реЗ рдПрдХ "рд╕рдореНрдорд╛рди рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рдЕрдзрд┐рдХрддрдо рдХреЗ рдХрд░реАрдм рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдЦреБрд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдмрдВрдж рд╣реЛрдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рдПрдЧреА"ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬрд╣рд╛рдБ рднреА рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗ рдмрдЬрд╛рдп рдЖрдВрддрд░рд┐рдХ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЬрдм рдЖрдк рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдореИрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд░рдо рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЖрдХреНрд░рд╛рдордХ рдмреБрдирд┐рдпрд╛рджреА рдорджрджрдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдФрд░ рд▓реЗрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рдЕрд╕реЗрдВрдмрд▓реА .NET рдореЗрдВ рддреИрдирд╛рддреА рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдЗрдХрд╛рдИ рд╣реИ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдХрд▓рди рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ, рдпрд╣ рдпрд╛ рддреЛ .dll рдпрд╛ .exe рд╣реИред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ - рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИред
- рдЖрдВрддрд░рд┐рдХ - рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред
- рд╕рдВрд░рдХреНрд╖рд┐рдд - рдПрдХ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╕реНрдерд┐рдд рд╣реИред
- рдирд┐рдЬреА - рдПрдХ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬрд┐рд╕реЗ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИред рдФрд░ рдХреЛрдИ рдирд╣реАрдВред
рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдФрд░ рдлреНрд░реЗрдВрдбрд▓реА рдмрд┐рд▓реНрдб
C ++ рдореЗрдВ, рдореИрддреНрд░реАрдкреВрд░реНрдг рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрдЬреАрдм рд╡рд┐рд╢реЗрд╖рддрд╛ рдереАред рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рдЬреБрдбрд╝рд╛рд╡ рдХреА рд╕реАрдорд╛ рдХреЛ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ C ++ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЬреАрдм рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рд╢реАрд░реНрд╖ рджрд╕ рд╕рдмрд╕реЗ рдЕрдЬреАрдм рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдХрд╕рдХрд░ рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░рдирд╛, рдХрд┐рд╕реА рддрд░рд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдерд╛ рдХрд┐ .NET рдореЗрдВ рдореИрддреНрд░реАрдкреВрд░реНрдг рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рд╣реИрдВ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ред рдпрд╣реА рд╣реИ, рдЖрдк рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд▓реЙрдХ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИред рдЬрдм рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рддреЛ рдореБрдЭреЗ рдХреБрдЫ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖред рднрд▓рд╛, рдХреИрд╕реЗ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВ? рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ? рджреЛрдиреЛрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдХрд╕рдХрд░ рдмрд╛рдВрдзрдиреЗ рд╡рд╛рд▓реЗ, рдЙрдирдХреЗ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рд▓рдЧреЗ рд░рд╣реЗрдВрдЧреЗ? рдорд╛рдорд▓реЗ рдЬрдм рдХрд┐рд╕реА рднреА рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдврд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рдлрд┐рд░ рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдореБрд░рд╛рдИ рдХреЗ рдкрде рдХреА рдПрдХ рд╢рд╛рдЦрд╛ рдХреЛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛: рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгред рдФрд░ рдлреЗрдВрдЧ рд╢реБрдИ рдЗрдХрд╛рдИ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣реА рдлреЗрдВрдЧрд╢реБрдИ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рдм рдХреБрдЫ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореБрдЭреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╛ рддреЛ рдкрд░реАрдХреНрд╖рдг рдЕрдЧрд▓-рдмрдЧрд▓ рд▓реЗрдЯ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдпрд╛ рд╕рдм рдХреБрдЫ рдХреАрд╡рд░реНрдб рдЬрдирддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмреНрд░реЗрдб рдХрд┐рддрдиреЗ рд╕рдордп рд╕реЗ рдирдореА рдореЗрдВ рдкрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдФрд░ рдпрд╣рд╛рдБ, рдореЗрд░реА рд╕реНрдореГрддрд┐ рдХреЗ рдбрд┐рдмреНрдмреЗ рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ, рдЕрдиреБрдХреВрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрд╕реЗрдВрдмрд▓реА "YourAssemblyName" рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
[assembly: InternalsVisibleTo("YourAssemblyName.Tests")]
рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА "YourAssemblyName.Tests" рдпрд╣ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ "YourAssemblyName" рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдпрд╣ рд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реАрдЗрдиреНрдлреЛ.рдХреЗ рдореЗрдВ рдереЛрдбрд╝реА-рд╕реА рджрд░реНрдЬ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╡реАрдПрд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред
рдореВрд▓ рдорджрдж рдХреЗ рд▓рд┐рдП рдЕрдкрдорд╛рдирдЬрдирдХ рд▓реМрдЯреЗрдВ.NET рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдорд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдпрд╛ рдХреАрд╡рд░реНрдб рдЬреИрд╕реЗ рдЕрдореВрд░реНрдд, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдЖрдВрддрд░рд┐рдХ, рд╕реНрдерд┐рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рд▓рдЯрдХрд╛рдПрдВ: рдлрд╝реАрд▓реНрдб, рдЧреБрдг, рд╡рд░реНрдЧ, рд╡рд┐рдзрд┐рдпрд╛рдБ, рдШрдЯрдирд╛рдПрдБ, рдФрд░ рд╕рдВрдкреВрд░реНрдг рдЕрд╕реЗрдВрдмрд▓реАред C # рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдмрд╕ рдЙрд╕ рдкрд░ рд▓рдЯрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рд▓рд┐рдЦреЗрдВред рдЕрдкрд╡рд╛рдж рд╕реНрд╡рдпрдВ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рд╕реАрдзрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдЕрд╕реЗрдВрдмрд▓реА рдпрд╣рд╛рдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ"ред рд╡рд╣рд╛рдВ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднреЗрдбрд╝рд┐рдпреЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ, рднреЗрдбрд╝реЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рднреА рд╕рдВрднрд╡ рд╣реИ рд╡рд╣ рдЕрднреА рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рдореМрдЬреВрджрд╛ рдХрд╛рд░рдгред
рдореИрдВ рд▓рдЧрднрдЧ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рднреВрд▓ рдЧрдпрд╛ред рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ InternalsVanishTo рдПрдХ рддрд░рдлрд╝рд╛ рд╣реИред
рд╕рдВрд░рдХреНрд╖рд┐рдд <рдЖрдВрддрд░рд┐рдХ?
рддреЛ рд╕реНрдерд┐рддрд┐: A рдФрд░ B рдПрдХ рдкрд╛рдЗрдк рдкрд░ рдмреИрдареЗ рдереЗред
using System; namespace Pipe { public class A { public String SomeProperty { get; protected set; } } internal class B {
рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдП рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЦреБрдж рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдмреА рдиреЗ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдЬреЛ рдкрд╣рд▓реЗ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдПрдХ рд╕реНрддреВрдк рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдкреНрд░реЙрдкрд░реНрдЯреА рдРрдХреНрд╕реЗрд╕рд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рджреЗрддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рднреА рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЧрд╛:
internal String OtherProperty { get; public set; }
рд▓реЗрдХрд┐рди рдЗрд╕ рд░реЗрдЦрд╛ рдХреЗ рджрд╛рд╡реЗ рддреБрд░рдВрдд рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рддреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ:
internal String OtherProperty { get; protected set; }
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реЛрдЧреА:
internal String OtherProperty { get; private set; }
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдкрджрд╛рдиреБрдХреНрд░рдо рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public > internal > protected > private
рдФрд░ рдпрд╣ рдкрджрд╛рдиреБрдХреНрд░рдо рднреА рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рд╕рд┐рд╡рд╛рдп рдПрдХ рдЬрдЧрд╣ рдХреЗред рдЬрд╣рд╛рдВ рдЖрдВрддрд░рд┐рдХ> рд╕рдВрд░рдХреНрд╖рд┐рддред рд╕рдВрдХрд▓рдХ рдХреЗ рджрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдФрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рджреНрд╡рд╛рд░рд╛ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдП рдЧрдП рд╣реИрдВред рдЖрдВрддрд░рд┐рдХ - рдХреЗрд╡рд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ред рд╕рдВрд░рдХреНрд╖рд┐рдд - рдХреЗрд╡рд▓ рд╡рд╛рд░рд┐рд╕ред рдХрд┐рд╕реА рднреА рд╡рд╛рд░рд┐рд╕ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВред рдФрд░ рдпрджрд┐ рд╡рд░реНрдЧ рдмреА рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдЖрдк рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рд╕реЗрдЯ рдПрдХреНрд╕реЗрд╕рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЬрдЧрд╣ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреВрд░реА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЪреВрдБрдХрд┐ C # рдХрдВрдкрд╛рдЗрд▓рд░ рдкреИрд░рд╛рдиреЙрдпрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рднреА рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд╛рд░рд┐рд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕рд░ рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЖрдВрддрд░рд┐рдХ рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ рд╣реИред
рдпрд╣ рдорджрдж рдЗрддрдиреА рдЖрдХреНрд░рд╛рдордХ рдирд╣реАрдВ рд╣реИ- рд╕рдВрд░рдХреНрд╖рд┐рдд рдЖрдВрддрд░рд┐рдХ - рдПрдХ рдкрд╣реБрдВрдЪ рд╕рдВрд╢реЛрдзрдХ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рд╕реНрдерд┐рдд рд╣реИред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдореЗрдВ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
using System; namespace Pipe { internal class B { protected internal String OtherProperty { get; protected set; } } }
рдФрд░ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреА рд╕рд╣реА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
public > protected internal > internal/protected > private
рдЗрдВрдЯрд░рдлреЗрд╕
рддреЛ, рд╕реНрдерд┐рддрд┐: A, I, B рдкрд╛рдЗрдк рдкрд░ рдмреИрдареЗ рдереЗред
namespace Pipe { internal interface I { void SomeMethod(); } internal class A : I { internal void SomeMethod() {
рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рдмреИрда рдЧрдП рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рд╣рд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рджрд╛рд╡реЛрдВ рдХрд╛ рд╕рд╛рд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЦреБрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рднрд▓реЗ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реА рдмрдВрдж рд╣реЛред рдЗрд╕рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЯрд╛рдИ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреЛ рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдирд╣реАрдВ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд░рд╛рд╕реНрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛: рджрд╛рдВрддреЛрдВ рдХреА рдХреНрд░реЗрдХ рдФрд░ рдЧреЗрдирд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рд▓рдЯрдХрд╛рдПрдВред рджреВрд╕рд░рд╛: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
namespace Pipe { internal interface I { void SomeMethod(); } internal class A : I { public void SomeMethod() { } } internal class B : I { void I.SomeMethod() { } } }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрд▓рдмреНрдз рд╣реИ? рдЪрд▓реЛ рдмрд╕ рдХреЛрдИ рдирд╣реАрдВ рдХрд╣рддрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
B b = new B();
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ I рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдИ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдЦрди (рдмреА рдореИрдВ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдХреБрдЫ рд╕рдордп () рд╣рд░ рдмрд╛рд░ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ (I) b) .SomeMethod ()ред рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рджреЛ рд░рд╛рд╕реНрддреЗ рдорд┐рд▓реЗред рдореИрдВрдиреЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕рдордЭрд╛ред
рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ:
internal class Factory { internal I Create() { return new B(); } }
рдЦреИрд░, рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреИрдЯрд░реНрди рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рджреЛ - рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ:
internal static class IExtensions { internal static void SomeMethod(this I i) { i.SomeMethod(); } }
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рд░реЛрдХрддреА рд╣реИрдВ:
B b = new B(); b.SomeMethod();
рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЙрд▓ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯреЗрд▓реАрдЬреЗрдВрд╕ рд╣рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдПред рдФрд░ рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рдХреИрд╡реЗрдЯ рд░рд╣рддрд╛ рд╣реИред рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░, рдЖрдкрдХреЛ рдЗрд╕ рдХреАрд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
internal class B : I { internal void OtherMethod() {
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд╣реИред рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдХрдо рдмреБрд░рд╛рдИ рдЪреБрдиреЗрдВред
рдкреНрд░рддрд┐рдмрд┐рдВрдм
рдореИрдВрдиреЗ рдЗрд╕ рджрд░реНрдж рдХреЛ рддрдм рдорд╛рд░рд╛ рдЬрдм рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреБрдЫ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рджреЗрдЧрд╛ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рддрд╛рд░реНрдХрд┐рдХ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддрд┐рдмрд┐рдВрдм, рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реНрдорд╛рд░реНрдЯ рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдЬреЛ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореИрдВрдиреЗ рдРрд╕рд╛ рд╕реЛрдЪрд╛ рдерд╛, рдХрдо рд╕реЗ рдХрдо)ред рджреВрд╕рд░реЗ, рдкрд░рд╛рд╡рд░реНрддрди рдХрд╛ рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╡реНрдпрд╛рдкрдХ рдмрдирд╛рдирд╛ рд╣реИред рдЖрдк рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рднреА, fiy-ha!)ред рдФрд░ рд╡реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рддреЗ-рдлрд┐рд░рддреЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕, рдореЙрдбреНрд╕, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдФрд░ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдЖрдкрдХрд╛ рдПрдкреАрдЖрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреЛ рджреЗрдЦрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐ рд╕реЗ рддрдХрдиреАрдХреА рдФрд░ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рд╣реИред
рдЕрджреНрдпрддрдиред рдпрд╣рд╛рдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрдЫрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЖрдВрддрд░рд┐рдХ рднреА рд╣реЛ, рдирд┐рдЬреА рднреАред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдРрд╕рд╛ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкрд╛рда рдЕрднреА рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ рдЬрдм рд╣рдо рдЦреБрд▓реЗ рд╕рджрд╕реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд╕ рди рдХрд░реЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВред
рдпрд╣ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдП, рдЖрдИ, рдмреА рдПрдХ рдкрд╛рдЗрдк рдкрд░ рдмреИрдареЗ рдереЗ:
namespace Pipe { internal interface I { void SomeMethod(); } internal static class IExtensions { internal static void SomeMethod(this I i) { i.SomeMethod(); } } internal class A : I { public void SomeMethod() { } internal void OtherMethod() { } } internal class B : I { internal void OtherMethod() { } void I.SomeMethod() { } } }
рдХреНрд▓рд╛рд╕ рдП рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдЧрд░ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рджрд░реНрдж рди рд╣реЛ, рдФрд░ рдХреЛрдб рдХреЛ рдХреЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рд╡рд░реНрдЧ рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЖрдВрддрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╛рд╣рд░ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдФрд░ рдлрд┐рд░ рджрд░рд╡рд╛рдЬрд╛ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рдЪреБрдкрдЪрд╛рдк рд░реЗрдВрдЧрдиреЗ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм:
using Pipe; using System; using System.Reflection; namespace EncapsulationTest { public class Program { public static void Main(string[] args) { FindThroughReflection(typeof(I), "SomeMethod"); FindThroughReflection(typeof(IExtensions), "SomeMethod"); FindThroughReflection(typeof(A), "SomeMethod"); FindThroughReflection(typeof(A), "OtherMethod"); FindThroughReflection(typeof(B), "SomeMethod"); FindThroughReflection(typeof(B), "OtherMethod"); Console.ReadLine(); } private static void FindThroughReflection(Type type, String methodName) { MethodInfo methodInfo = type.GetMethod(methodName); if (methodInfo != null) Console.WriteLine($"In type {type.Name} we found {methodInfo}"); else Console.WriteLine($"NULL! Can't find method {methodName} in type {type.Name}"); } } }
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЪрд▓рд╛рдПрдВред рдпрд╣рд╛рдВ рд╣рдо рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рдорд╛рд░реЗ рдкрд╛рдЗрдк (рдиреЗрдорд╕реНрдкреЗрд╕ рдкрд╛рдЗрдк) рд╕реЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ рдЬреЛ рдпрд╣ рд╣рдореЗрдВ рджреЗрддрд╛ рд╣реИ:
рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдореБрдЭреЗ Void SomeMethod () рдорд┐рд▓рд╛
рд╢реВрдиреНрдп! рдЯрд╛рдЗрдк IExtensions рдореЗрдВ рд╡рд┐рдзрд┐ SomeMethod рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ
рдкреНрд░рдХрд╛рд░ A рдореЗрдВ рд╣рдордиреЗ Void SomeMethod () рдкрд╛рдпрд╛
рд╢реВрдиреНрдп! рдкреНрд░рдХрд╛рд░ A рдореЗрдВ рдЕрдиреНрдп OtherMethod рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдвреВрдБрдв рд╕рдХрддрд╛
рд╢реВрдиреНрдп! рдЯрд╛рдЗрдк B рдореЗрдВ рдореЗрдердбрдореЗрдереЛрдб рдХреЛ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА
рд╢реВрдиреНрдп! рдЯрд╛рдЗрдк B рдореЗрдВ рдореЗрдердб рдЕрдиреНрдп рдореЗрдереЛрдб рдирд╣реАрдВ рдвреВрдБрдв рд╕рдХрддреЗ
рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ MethodInfo рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреБрдЫ рдорд┐рд▓рд╛, рддреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рд╣рдордиреЗ рдХреБрдЫ рдкрд╛рдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп SomeMethod () рд╡рд░реНрдЧ рдП рд╕реЗ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЧрдИ рдереА, рдФрд░ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИред рдЗрд╕ рднреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ I рд╕реЗ рд╢реВрдиреНрдп SomeMethod () рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдЦреБрдж рдХреЛ рдХреИрд╕реЗ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд░рдЦреЗ рдЧрдП рд╕рд╛рд░ рддрд░реАрдХреЗ (рдпрд╛ рд╕реАрдПрд▓рдЖрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИрдВ) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрд▓реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖:
рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВред рдкреНрд░рдХрд╛рд░ рдЖрдк рджреВрд░ рджреЗ рд░рд╣реЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрдЪрд┐рдд рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдПрдХ рдЕрдиреБрднрд╡реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд░реВрдВрдЧрд╛ред рдФрд░ рдЗрд╕рдореЗрдВ ILDasm рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдкрд╛рдЗрдк рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдЦрд░рдЧреЛрд╢ рдХреЗ рдЫреЗрдж рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
TypeDef #2 (02000003)
-------------------------------------------------------
TypDefName: Pipe.I (02000003)
Flags : [NotPublic] [AutoLayout] [Interface] [Abstract] [AnsiClass] (000000a0)
Extends : 01000000 [TypeRef]
Method #1 (06000004)
-------------------------------------------------------
MethodName: SomeMethod (06000004)
Flags : [Public] [Virtual] [HideBySig] [NewSlot] [Abstract] (000005c6)
RVA : 0x00000000
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
TypeDef #3 (02000004)
-------------------------------------------------------
TypDefName: Pipe.IExtensions (02000004)
Flags : [NotPublic] [AutoLayout] [Class] [Abstract] [Sealed] [AnsiClass] [BeforeFieldInit] (00100180)
Extends : 01000011 [TypeRef] System.Object
Method #1 (06000005)
-------------------------------------------------------
MethodName: SomeMethod (06000005)
Flags : [Assem] [Static] [HideBySig] [ReuseSlot] (00000093)
RVA : 0x00002134
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
ReturnType: Void
1 Arguments
Argument #1: Class Pipe.I
1 Parameters
(1) ParamToken : (08000004) Name : i flags: [none] (00000000)
CustomAttribute #1 (0c000011)
-------------------------------------------------------
CustomAttribute Type: 0a000001
CustomAttributeName: System.Runtime.CompilerServices.ExtensionAttribute :: instance void .ctor()
Length: 4
Value : 01 00 00 00 > <
ctor args: ()
CustomAttribute #1 (0c000010)
-------------------------------------------------------
CustomAttribute Type: 0a000001
CustomAttributeName: System.Runtime.CompilerServices.ExtensionAttribute :: instance void .ctor()
Length: 4
Value : 01 00 00 00 > <
ctor args: ()
TypeDef #4 (02000005)
-------------------------------------------------------
TypDefName: Pipe.A (02000005)
Flags : [NotPublic] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit] (00100000)
Extends : 01000011 [TypeRef] System.Object
Method #1 (06000006)
-------------------------------------------------------
MethodName: SomeMethod (06000006)
Flags : [Public] [Final] [Virtual] [HideBySig] [NewSlot] (000001e6)
RVA : 0x0000213c
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
Method #2 (06000007)
-------------------------------------------------------
MethodName: OtherMethod (06000007)
Flags : [Assem] [HideBySig] [ReuseSlot] (00000083)
RVA : 0x0000213e
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
Method #3 (06000008)
-------------------------------------------------------
MethodName: .ctor (06000008)
Flags : [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor] (00001886)
RVA : 0x00002140
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
InterfaceImpl #1 (09000001)
-------------------------------------------------------
Class : Pipe.A
Token : 02000003 [TypeDef] Pipe.I
TypeDef #5 (02000006)
-------------------------------------------------------
TypDefName: Pipe.B (02000006)
Flags : [NotPublic] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit] (00100000)
Extends : 01000011 [TypeRef] System.Object
Method #1 (06000009)
-------------------------------------------------------
MethodName: OtherMethod (06000009)
Flags : [Assem] [HideBySig] [ReuseSlot] (00000083)
RVA : 0x00002148
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
Method #2 (0600000a)
-------------------------------------------------------
MethodName: Pipe.I.SomeMethod (0600000A)
Flags : [Private] [Final] [Virtual] [HideBySig] [NewSlot] (000001e1)
RVA : 0x0000214a
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
Method #3 (0600000b)
-------------------------------------------------------
MethodName: .ctor (0600000B)
Flags : [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor] (00001886)
RVA : 0x0000214c
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
hasThis
ReturnType: Void
No arguments.
MethodImpl #1 (00000001)
-------------------------------------------------------
Method Body Token : 0x0600000a
Method Declaration Token : 0x06000004
InterfaceImpl #1 (09000002)
-------------------------------------------------------
Class : Pipe.B
Token : 02000003 [TypeDef] Pipe.I
рдПрдХ рддреНрд╡рд░рд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЕрднреА рднреА рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╣рдорд╕реЗ рдЫрд┐рдкрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдВрдЪ рд▓рд╛рдЗрдиреЗрдВ рдЗрддрдиреА рдмрдбрд╝реА рдмреБрд░рд╛рдИ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рдорд╛рди рд╣реИ:
рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВред рдкреНрд░рдХрд╛рд░ рдЖрдк рджреВрд░ рджреЗ рд░рд╣реЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░, рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХреАрд╡рд░реНрдб рдЖрдВрддрд░рд┐рдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рдЬрд╣рд╛рдВ рдЬрдирддрд╛ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкреБрдирд╢реНрдЪ
рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдЕрдВрджрд░ рд╣рд░ рдЬрдЧрд╣ рдЖрдВрддрд░рд┐рдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ? рдЬрдм рдпрд╣ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдкреНрд░рдХрд╛рд░ рдЦреБрд▓реЗ рд╣реЛрдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВред
рдЗрд╕рдХрд╛ рдЕрд░реНрде рдирд┐рдореНрди рд╣реИ: рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдирд╡рдЬрд╛рдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмреАрдЪ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╕реАрдорд╛ рдХреНрдпрд╛ рдЖрдХрд╛рд░ рд▓реЗрдЧреАред рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЦреВрдмрд╕реВрд░рдд рдФрд░ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдкреА рдкреА рдПрд╕
рд╕рдВрд╕реНрдХрд░рдг рд╕реА # 7.2 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдПрдХ рдирдпрд╛ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ, рдирд┐рдЬреА рд╕рдВрд░рдХреНрд╖рд┐рдд, рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рд╣реБрдЖред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдЗрд╕ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред