рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рдХреНрд░рдо (C #)

рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдХреНрд░рдо рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдЯреАрдХ рдСрд░реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдВрд╢рд┐рдХ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рджреВрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо LayoutKind.Sequential рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде LayoutKind.Sequential рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЛ рдХреЛрдб рдореЗрдВ рдШреЛрд╖рд┐рдд рдХреНрд░рдо рдореЗрдВ рдЦреЗрддреЛрдВ рдХреЛ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдореЗрдореЛрд░реА рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо Marshal.OffsetOf рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрдХреНрд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг:
 [StructLayout(LayoutKind.Sequential)] public class TestClass1 { public int Value1; public string Value2; public bool Value3; } 


рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЫрд╛рдБрдЯрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
  Type type = typeof(TestClass1); List<FieldInfo> fields = new List<FieldInfo>(type.GetFields()); //   foreach (FieldInfo field in fields) Console.WriteLine(field.Name); Console.WriteLine(); //    ( ) fields.Sort( delegate(FieldInfo _first, FieldInfo _second) { int first = _first.FieldType.GetHashCode(); int second = _second.FieldType.GetHashCode(); return first.CompareTo(second); } ); foreach (FieldInfo field in fields) Console.WriteLine(field.Name); Console.WriteLine(); //      fields.Sort( delegate(FieldInfo _first, FieldInfo _second) { int first = Marshal.OffsetOf(type, _first.Name).ToInt32(); int second = Marshal.OffsetOf(type, _second.Name).ToInt32(); return first.CompareTo(second); } ); foreach (FieldInfo field in fields) Console.WriteLine(field.Name); Console.WriteLine(); 


рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ? рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдмрд╣реБрдд рджреБрд░реНрд▓рднред рдЖрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ:

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


All Articles