Практическое руководство. Создание объединения C/C++ с помощью атрибутов (руководство по программированию на C#)
Обновлен: Ноябрь 2007
Использование атрибутов позволяет настраивать расположение структур в памяти. Например, можно создать так называемое объединение в языках C/C++ с помощью атрибутов StructLayout(LayoutKind.Explicit) и FieldOffset.
Пример
В этом сегменте кода все поля объединения TestUnion начинаются с одного адреса в памяти.
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestUnion
{
[System.Runtime.InteropServices.FieldOffset(0)]
public int i;
[System.Runtime.InteropServices.FieldOffset(0)]
public double d;
[System.Runtime.InteropServices.FieldOffset(0)]
public char c;
[System.Runtime.InteropServices.FieldOffset(0)]
public byte b;
}
Ниже приведен еще один пример, в котором поля начинаются с разных явно заданных адресов.
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestExplicit
{
[System.Runtime.InteropServices.FieldOffset(0)]
public long lg;
[System.Runtime.InteropServices.FieldOffset(0)]
public int i1;
[System.Runtime.InteropServices.FieldOffset(4)]
public int i2;
[System.Runtime.InteropServices.FieldOffset(8)]
public double d;
[System.Runtime.InteropServices.FieldOffset(12)]
public char c;
[System.Runtime.InteropServices.FieldOffset(14)]
public byte b;
}
Два поля int, i1 и i2, совместно используют те же адреса в памяти, что и lg. Такое управление расположением структуры полезно при использовании вызова неуправляемого кода.
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Отражение (Руководство по программированию на C#)
Атрибуты (Руководство по программированию на C#)
Использование атрибутов (Руководство по программированию на C#)
Устранение неоднозначностей в целевых объектах атрибутов (Руководство по программированию на C#)
Создание настраиваемых атрибутов (руководство по программированию в C#)
Доступ к атрибутам через отражение (Руководство по программированию в C#)