рдкрд░рд╛рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдХреНрд░рдо рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдЯреАрдХ рдСрд░реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдВрд╢рд┐рдХ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕
рджреВрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо
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());
рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ? рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдмрд╣реБрдд рджреБрд░реНрд▓рднред рдЖрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ:
- рдЖрдВрд╢рд┐рдХ рдХреНрд░рдорд╛рдВрдХрди (рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рджреЗрдирд╛, рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
- рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░рдг
- рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░рдг
- рдЯреВрд▓рдХрд┐рдЯ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рджреГрд╢реНрдп рдХреНрд░рдо рдХреЛрдб рдореЗрдВ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдПрдЧрд╛)