Type.IsExplicitLayout Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan nilai yang menunjukkan apakah bidang jenis saat ini ditata pada offset yang ditentukan secara eksplisit.
public:
property bool IsExplicitLayout { bool get(); };
public bool IsExplicitLayout { get; }
member this.IsExplicitLayout : bool
Public ReadOnly Property IsExplicitLayout As Boolean
Nilai Properti
true
Attributes jika properti dari jenis saat ini mencakup ExplicitLayout; jika tidak, false.
Penerapan
Contoh
Contoh berikut membuat instans jenis dan menampilkan nilai propertinya IsExplicitLayout . Ini menggunakan MySystemTime kelas , yang juga dalam contoh kode untuk 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
Keterangan
Properti ini disediakan sebagai kenyamanan. Atau, Anda dapat menggunakan TypeAttributes.LayoutMask nilai enumerasi untuk memilih atribut tata letak jenis, lalu menguji apakah TypeAttributes.ExplicitLayout diatur. Nilai TypeAttributes.AutoLayoutenumerasi , TypeAttributes.ExplicitLayout, dan TypeAttributes.SequentialLayout menunjukkan cara bidang jenis ditata dalam memori.
Untuk jenis dinamis, Anda dapat menentukan TypeAttributes.ExplicitLayout kapan Anda membuat jenis. Dalam kode, terapkan StructLayoutAttribute atribut dengan LayoutKind.Explicit nilai enumerasi ke jenis , untuk menentukan bahwa offset tempat bidang dimulai ditentukan secara eksplisit.
Nota
Anda tidak dapat menggunakan GetCustomAttributes metode untuk menentukan apakah StructLayoutAttribute telah diterapkan ke tipe.
Jika saat ini Type mewakili jenis generik yang dibangun, properti ini berlaku untuk definisi jenis generik tempat jenis dibuat. Misalnya, jika saat ini Type mewakili MyGenericType<int> (MyGenericType(Of Integer) dalam Visual Basic), nilai properti ini ditentukan oleh MyGenericType<T>.
Jika saat ini Type mewakili parameter jenis dalam definisi jenis generik atau metode generik, properti ini selalu mengembalikan false.