.Net-рдЬрд╛рд╕реВрд╕: рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ IList рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреНрд░рд╛рдЪреАрди .Net рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рдерд╛ред рдХреНрдпреЛрдВ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдПрдХ рдЕрд▓рдЧ рд▓рдВрдмреА рдХрд╣рд╛рдиреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ, рд╢рд╛рдпрджред рдЕрдЧрд▓реА рдмрд╛рд░ рдмрддрд╛рдКрдВрдЧрд╛ред

рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХрд┐рди рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

foreach(var tp in typeof(IList).GetMembers()) Console.WriteLine(tp.Name); 

... рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗ:
 get_Item set_Item Add Contains Clear get_IsReadOnly get_IsFixedSize IndexOf Insert Remove RemoveAt Item IsReadOnly IsFixedSize 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрд╕рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЧреБрдг рдХреЗ рдЧреЗрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╣рдорд╛рд░реЗ рд╕рд╛рдеред рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреАрди рдФрд░ рдЧреБрдг рд╣реИрдВ: рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЖрдЗрдЯрдо, рдФрд░ рджреЛ рдкреБрдирд░реНрдЬрдиреНрдо рдЧреБрдг IsReadOnly рдФрд░ IsFixedSizeред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд╛рдореЛрдВ рдХрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рджреЛрд╣рд░рд╛рд╡ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: get_IsReadOnly // IsReadOnly, get_IsFixedSize // IsFixedSize, get_Item // set_Item / рдЖрдЗрдЯрдоред рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ рдФрд░, рд╕реНрд╡рдпрдВ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреБрдгреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рднреА рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рдХрд▓рд╛ рд╣реИ:
  foreach(var tp in typeof(IList).GetMembers()) Console.WriteLine("{0} -- {1}", tp.Name, Enum.GetName(tp.MemberType.GetType(), tp.MemberType)); 

рдЗрд╕ рдХреЛрдб рдиреЗ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛ред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ:
 get_Item -- Method set_Item -- Method Add -- Method Contains -- Method Clear -- Method get_IsReadOnly -- Method get_IsFixedSize -- Method IndexOf -- Method Insert -- Method Remove -- Method RemoveAt -- Method Item -- Property IsReadOnly -- Property IsFixedSize -- Property 

рддреЛ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ get_IsReadOnly IsReadOnly рд╕рдВрдкрддреНрддрд┐ (рдЬреЛ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕рджрд╕реНрдп рд╣реИ, рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде-рд╕рд╛рде) рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреИрд╕реЗ get_IsFixedSize рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ IsFixedSize рдЧреБрдг рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдЗрдЯрдо рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ рд╕реЗрдЯрд░ рдФрд░ рдПрдХ рдЧрдЯрд░ рд╣реИ, рдпрд╛рдиреА рдЗрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕реЛрдЪрд╛: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВред
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрдХрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрдХреАрди рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдРрд╕рд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛:
  public class Test1 { public int A { get; set; } public int get_A() { return 0; } } 

рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
 Type 'TestArray.Test1' already reserves a member called 'get_A' with the same parameter types 

рдЖрдЗрдЯрдо рдХреА рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдХрд▓реАред рдореЗрд░рд╛ рдХреВрдмрдбрд╝ рдХрд┐ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИ, рд╕рдЪ рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕ рдмрд╛рд░ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд╕рд░реЗ рдЕрд╕рдореНрдмрджреНрдз рд╡рд░реНрдЧ рдХреЛ рдЬреАрддрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:
  public class Test2 { public int Item { get; set; } public int this[int num] { get { return 0; } } } 

рдЗрд╕ рдмрд╛рд░ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░ рднреА рд╕реНрдкрд╖реНрдЯ рдерд╛:
 The type 'TestArray.Test2' already contains a definition for 'Item' 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рдХ рдХреЛ "рдЯреНрд░рд┐рдХ" рдХрд░рдиреЗ рдХрд╛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣рд╛ред рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдЙрджрд╛рд╣рд░рдг рдХрдХреНрд╖рд╛рдПрдВ,

  public class Test4 { public int Item { get; set; } } public class Test3 { public Test3 get_Item(int index) { return this; } public void set_Item(int index, Test3 value) { } } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛:
 Cannot apply indexing with [] to an expression of type 'TestArray.Test4' 

рдЗрд╕ рддрд░рд╣ рд╕реЗред рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдЪреАрджрд╛ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

рдПрдХ рдЫреЛрдЯреА рдЬрд╛рдВрдЪ рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


рдЕрдЧрд░ рд▓реЗрдЦ рд╕реБрдЦрдж рд╣реИред рдлрд┐рд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ IList рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

Source: https://habr.com/ru/post/In156035/


All Articles