Type.IsExplicitLayout Propriété

Définition

Obtient une valeur qui indique si les champs du type actuel sont placés aux offsets explicitement spécifiés.

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

Valeur de propriété

Boolean

true si la propriété Attributes du type actuel comprend ExplicitLayout ; sinon, false.

Implémente

Exemples

L’exemple suivant crée une instance d’un type et affiche la valeur de sa IsExplicitLayout propriété. Elle utilise la MySystemTime classe, qui se trouve également dans l’exemple de code pour 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

Remarques

Cette propriété est fournie comme commodité. Vous pouvez également utiliser la TypeAttributes.LayoutMask valeur d’énumération pour sélectionner les attributs de disposition de type, puis tester s’il TypeAttributes.ExplicitLayout est défini. Les TypeAttributes.AutoLayoutvaleurs , et TypeAttributes.SequentialLayout TypeAttributes.ExplicitLayoutd’énumération indiquent la façon dont les champs du type sont disposés en mémoire.

Pour les types dynamiques, vous pouvez spécifier quand vous créez TypeAttributes.ExplicitLayout le type. Dans le code, appliquez l’attribut avec la StructLayoutAttribute LayoutKind.Explicit valeur d’énumération au type pour spécifier que les décalages au début des champs sont spécifiés explicitement.

Notes

Vous ne pouvez pas utiliser la GetCustomAttributes méthode pour déterminer si le StructLayoutAttribute type a été appliqué.

Si le courant Type représente un type générique construit, cette propriété s’applique à la définition de type générique à partir de laquelle le type a été construit. Par exemple, si le courant Type représente MyGenericType<int> (MyGenericType(Of Integer)dans Visual Basic), la valeur de cette propriété est déterminée par MyGenericType<T>.

Si le courant Type représente un paramètre de type dans la définition d’un type générique ou d’une méthode générique, cette propriété retourne falsetoujours .

S’applique à

Voir aussi