Type.IsExplicitLayout Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает значение, указывающее, указывают ли поля текущего типа явным образом указанные смещения.
public:
property bool IsExplicitLayout { bool get(); };
public bool IsExplicitLayout { get; }
member this.IsExplicitLayout : bool
Public ReadOnly Property IsExplicitLayout As Boolean
Значение свойства
trueЗначение Attributes , falseесли свойство текущего типа содержитExplicitLayout; в противном случае .
Реализации
Примеры
В следующем примере создается экземпляр типа и отображается значение его IsExplicitLayout свойства. Он использует MySystemTime класс, который также находится в примере кода.StructLayoutAttribute
using System;
using System.Reflection;
using System.ComponentModel;
using System.Runtime.InteropServices;
// Class to test for the ExplicitLayout property.
[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
public class MySystemTime
{
[FieldOffset(0)]public ushort wYear;
[FieldOffset(2)]public ushort wMonth;
[FieldOffset(4)]public ushort wDayOfWeek;
[FieldOffset(6)]public ushort wDay;
[FieldOffset(8)]public ushort wHour;
[FieldOffset(10)]public ushort wMinute;
[FieldOffset(12)]public ushort wSecond;
[FieldOffset(14)]public ushort wMilliseconds;
}
public class Program
{
public static void Main(string[] args)
{
// Create an instance of the type using the GetType method.
Type t = typeof(MySystemTime);
// Get and display the IsExplicitLayout property.
Console.WriteLine("\nIsExplicitLayout for MySystemTime is {0}.",
t.IsExplicitLayout);
}
}
open System.Runtime.InteropServices
// Class to test for the ExplicitLayout property.
[<StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)>]
type MySystemTime =
[<FieldOffset 0>] val public wYear: uint16
[<FieldOffset 2>] val public wMonth: uint16
[<FieldOffset 4>] val public wDayOfWeek: uint16
[<FieldOffset 6>] val public wDay: uint16
[<FieldOffset 8>] val public wHour: uint16
[<FieldOffset 10>] val public wMinute: uint16
[<FieldOffset 12>] val public wSecond: uint16
[<FieldOffset 14>] val public wMilliseconds: uint16
// Create an instance of the type using the GetType method.
let t = typeof<MySystemTime>
// Get and display the IsExplicitLayout property.
printfn $"\nIsExplicitLayout for MySystemTime is {t.IsExplicitLayout}."
Imports System.Reflection
Imports System.ComponentModel
Imports System.Runtime.InteropServices
'Class to test for the ExplicitLayout property.
<StructLayout(LayoutKind.Explicit, Size := 16, CharSet := CharSet.Ansi)> _
Public Class MySystemTime
<FieldOffset(0)> Public wYear As Short
<FieldOffset(2)> Public wMonth As Short
<FieldOffset(4)> Public wDayOfWeek As Short
<FieldOffset(6)> Public wDay As Short
<FieldOffset(8)> Public wHour As Short
<FieldOffset(10)> Public wMinute As Short
<FieldOffset(12)> Public wSecond As Short
<FieldOffset(14)> Public wMilliseconds As Short
End Class
Public Class Program
Public Shared Sub Main()
'Create an instance of type using the GetType method.
Dim t As Type = GetType(MySystemTime)
' Get and display the IsExplicitLayout property.
Console.WriteLine(vbCrLf & "IsExplicitLayout for MySystemTime is {0}.", _
t.IsExplicitLayout)
End Sub
End Class
Комментарии
Это свойство предоставляется в качестве удобства. Кроме того, можно использовать TypeAttributes.LayoutMask значение перечисления для выбора атрибутов макета типа, а затем проверить, задано ли TypeAttributes.ExplicitLayout значение. Значения TypeAttributes.AutoLayout, TypeAttributes.ExplicitLayoutи TypeAttributes.SequentialLayout перечисление указывают способ, как поля типа размещаются в памяти.
Для динамических типов можно указать TypeAttributes.ExplicitLayout при создании типа. В коде StructLayoutAttribute примените атрибут со LayoutKind.Explicit значением перечисления к типу, чтобы указать, что смещения, с которыми начинаются поля, явно указываются.
Замечание
Метод нельзя использовать GetCustomAttributes для определения того, StructLayoutAttribute применен ли он к типу.
Если текущий Type представляет созданный универсальный тип, это свойство применяется к определению универсального типа, из которого был создан тип. Например, если текущий Type представляет MyGenericType<int> (MyGenericType(Of Integer) в Visual Basic), значение этого свойства определяется MyGenericType<T>.
Если текущий Type представляет параметр типа в определении универсального типа или универсального метода, это свойство всегда возвращается false.