Type.IsExplicitLayout 屬性


取得表示目前類型的欄位是否已在明確指定之位移配置版面的值。Gets a value indicating whether the fields of the current type are laid out at explicitly specified offsets.

 property bool IsExplicitLayout { bool get(); };
public bool IsExplicitLayout { get; }
member this.IsExplicitLayout : bool
Public ReadOnly Property IsExplicitLayout As Boolean


如果目前類型的 true 屬性包含 Attributes則為 ExplicitLayout,否則為 falsetrue if the Attributes property of the current type includes ExplicitLayout; otherwise, false.



下列範例會建立類型的實例,並顯示其 IsExplicitLayout 屬性的值。The following example creates an instance of a type and displays the value of its IsExplicitLayout property. 它會使用 MySystemTime 類別,也就是 StructLayoutAttribute的程式碼範例中。It uses the MySystemTime class, which is also in the code example for 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}.",
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}.", _
    End Sub
End Class


提供這個屬性是為了方便起見。This property is provided as a convenience. 或者,您可以使用 TypeAttributes.LayoutMask 列舉值來選取類型配置屬性,然後測試是否已設定 TypeAttributes.ExplicitLayoutAlternatively, you can use the TypeAttributes.LayoutMask enumeration value to select the type layout attributes, and then test whether TypeAttributes.ExplicitLayout is set. TypeAttributes.AutoLayoutTypeAttributes.ExplicitLayoutTypeAttributes.SequentialLayout 列舉值會指出類型欄位在記憶體中配置的方式。The TypeAttributes.AutoLayout, TypeAttributes.ExplicitLayout, and TypeAttributes.SequentialLayout enumeration values indicate the way the fields of the type are laid out in memory.

若為動態類型,您可以在建立類型時指定 TypeAttributes.ExplicitLayoutFor dynamic types, you can specify TypeAttributes.ExplicitLayout when you create the type. 在程式碼中,將具有 LayoutKind.Explicit 列舉值的 StructLayoutAttribute 屬性套用至類型,以指定明確指定欄位開始的位移。In code, apply the StructLayoutAttribute attribute with the LayoutKind.Explicit enumeration value to the type, to specify that the offsets at which the fields start are specified explicitly.


您無法使用 GetCustomAttributes 方法來判斷 StructLayoutAttribute 是否已套用至類型。You cannot use the GetCustomAttributes method to determine whether the StructLayoutAttribute has been applied to a type.

如果目前的 Type 代表結構化的泛型型別,這個屬性會套用至用來建立類型的泛型型別定義。If the current Type represents a constructed generic type, this property applies to the generic type definition from which the type was constructed. 例如,如果目前的 Type 表示 Visual Basic 中的 MyGenericType<int>MyGenericType(Of Integer)),則這個屬性的值是由 MyGenericType<T>所決定。For example, if the current Type represents MyGenericType<int> (MyGenericType(Of Integer) in Visual Basic), the value of this property is determined by MyGenericType<T>.

如果目前 Type 表示泛型型別或泛型方法定義中的類型參數,則這個屬性一律會傳回 falseIf the current Type represents a type parameter in the definition of a generic type or generic method, this property always returns false.