Teilen über


Type.IsExplicitLayout Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob die Felder des aktuellen Typs an den explizit angegebenen Offsets angelegt werden.

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

Eigenschaftswert

true, wenn die Attributes-Eigenschaft des aktuellen Typs ExplicitLayout umfasst; andernfalls false.

Implementiert

Beispiele

Im folgenden Beispiel wird eine Instanz eines Typs erstellt und der Wert der - IsExplicitLayout Eigenschaft angezeigt. Es verwendet die MySystemTime -Klasse, die sich auch im Codebeispiel für StructLayoutAttributebefindet.

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

Hinweise

Diese Eigenschaft wird als Benutzerfreundlichkeit bereitgestellt. Alternativ können Sie den TypeAttributes.LayoutMask Enumerationswert verwenden, um die Typlayoutattribute auszuwählen und dann zu testen, ob TypeAttributes.ExplicitLayout festgelegt ist. Die TypeAttributes.AutoLayoutEnumerationswerte , TypeAttributes.ExplicitLayoutund TypeAttributes.SequentialLayout geben an, wie die Felder des Typs im Arbeitsspeicher angeordnet sind.

Für dynamische Typen können Sie beim Erstellen des Typs angeben TypeAttributes.ExplicitLayout . Wenden Sie im Code das StructLayoutAttribute Attribut mit dem LayoutKind.Explicit Enumerationswert auf den Typ an, um anzugeben, dass die Offsets, an denen die Felder beginnen, explizit angegeben werden.

Hinweis

Sie können die GetCustomAttributes -Methode nicht verwenden, um zu bestimmen, ob auf StructLayoutAttribute einen Typ angewendet wurde.

Wenn der aktuelle einen konstruierten generischen Type Typ darstellt, gilt diese Eigenschaft für die generische Typdefinition, aus der der Typ erstellt wurde. Wenn der aktuelle Type beispielsweise (MyGenericType(Of Integer) in Visual Basic) darstellt MyGenericType<int> , wird der Wert dieser Eigenschaft durch MyGenericType<T>bestimmt.

Wenn der aktuelle einen Typparameter in der Definition eines generischen Typs oder einer generischen Type Methode darstellt, gibt diese Eigenschaft immer zurück false.

Gilt für:

Weitere Informationen