Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Оператор sizeof возвращает количество байтов, занятых переменной заданного типа. В безопасном коде аргумент оператора sizeof должен быть именем неуправляемого типа или параметром типа, ограниченным, чтобы быть неуправляемым типом. Неуправляемые типы включают все числовые типы, перечисления, а также кортежи и типы структур, в которых все члены являются неуправляемыми типами.
Выражения, представленные в следующей таблице, оцениваются во время компиляции в соответствующие константные значения и не требуют небезопасного контекста:
| Выражение | Константное значение |
|---|---|
sizeof(sbyte) |
1 |
sizeof(byte) |
1 |
sizeof(short) |
2 |
sizeof(ushort) |
2 |
sizeof(int) |
4 |
sizeof(uint) |
4 |
sizeof(long) |
8 |
sizeof(ulong) |
8 |
sizeof(char) |
2 |
sizeof(float) |
4 |
sizeof(double) |
8 |
sizeof(decimal) |
16 |
sizeof(bool) |
1 |
В небезопасном коде аргумент с sizeof может включать типы указателей и управляемые типы, в том числе неограниченные параметры типа. Примеры включают object и string.
В следующем примере показано использование оператора sizeof:
public struct Point
{
public Point(byte tag, double x, double y) => (Tag, X, Y) = (tag, x, y);
public byte Tag { get; }
public double X { get; }
public double Y { get; }
}
public class SizeOfOperator
{
public static void Main()
{
Console.WriteLine(sizeof(byte)); // output: 1
Console.WriteLine(sizeof(double)); // output: 8
DisplaySizeOf<Point>(); // output: Size of Point is 24
DisplaySizeOf<decimal>(); // output: Size of System.Decimal is 16
unsafe
{
Console.WriteLine(sizeof(Point*)); // output: 8
}
}
static unsafe void DisplaySizeOf<T>() where T : unmanaged
{
Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
}
}
Оператор sizeof возвращает количество байтов, выделенных средой CLR в управляемой памяти. Для типов структур , это значение включает любое заполнение, как показано в предыдущем примере. Результат оператора sizeof может отличаться от результата метода Marshal.SizeOf, который возвращает размер типа в неуправляемой памяти.
В небезопасном коде, если аргумент является управляемым типом, оператор sizeof возвращает размер ссылки, а не количество байтов, выделенных для экземпляра этого типа.
Важный
Значение, возвращаемое sizeof, может отличаться от результата Marshal.SizeOf(Object), который возвращает размер типа в неуправляемой памяти.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C# в разделе Оператор sizeof.