StructLayoutAttribute Sınıf

Tanım

Bellekteki bir sınıfın veya yapının veri alanlarının fiziksel düzenini denetlemenizi sağlar.

C#
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, Inherited=false)]
public sealed class StructLayoutAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class StructLayoutAttribute : Attribute
Devralma
StructLayoutAttribute
Öznitelikler

Örnekler

Aşağıdaki örnek, işlevin yönetilen bildirimini GetSystemTime gösterir ve düzeni olan LayoutKind.Explicit sınıfı tanımlarMySystemTime. GetSystemTime sistem saatini alır ve konsola yazdırır.

C#
using System;
using System.Runtime.InteropServices;

namespace InteropSample
{

   [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;
   }

   internal static class NativeMethods
   {
      [DllImport("kernel32.dll")]
      internal static extern void GetSystemTime([MarshalAs(UnmanagedType.LPStruct)]MySystemTime st);
   };

   class TestApplication
   {
      public static void Main()
      {
         try
         {
            MySystemTime sysTime = new MySystemTime();
            NativeMethods.GetSystemTime(sysTime);
            Console.WriteLine("The System time is {0}/{1}/{2} {3}:{4}:{5}", sysTime.wDay,
               sysTime.wMonth, sysTime.wYear, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
         }
         catch(TypeLoadException e)
         {
            Console.WriteLine("TypeLoadException : " + e.Message);
         }
         catch(Exception e)
         {
            Console.WriteLine("Exception : " + e.Message);
         }
      }
   }
}

Açıklamalar

Bu özniteliği sınıflara veya yapılara uygulayabilirsiniz.

Ortak dil çalışma zamanı, yönetilen bellekteki bir sınıfın veya yapının veri alanlarının fiziksel düzenini denetler. Ancak, türü yönetilmeyen koda geçirmek istiyorsanız, türün StructLayoutAttribute yönetilmeyen düzenini denetlemek için özniteliğini kullanabilirsiniz. Üyeleri göründükleri sırayla sıralı olarak yerleştirilmeye zorlamak için ile LayoutKind.Sequential özniteliğini kullanın. Kesilebilir türler için hem LayoutKind.Sequential yönetilen bellekteki düzeni hem de yönetilmeyen bellekteki düzeni denetler. Bölünebilir olmayan türler için, sınıf veya yapı yönetilmeyen koda sıralandığında düzeni denetler, ancak yönetilen bellekteki düzeni denetlemez. Her veri üyesinin tam konumunu denetlemek için özniteliğini ile LayoutKind.Explicit kullanın. Bu, hem blittable hem de blittable olmayan türler için hem yönetilen hem de yönetilmeyen düzeni etkiler. kullanmak LayoutKind.Explicit , türündeki FieldOffsetAttribute her alanın konumunu belirtmek için özniteliğini kullanmanızı gerektirir.

C#, Visual Basic ve C++ derleyicileri düzen değerini varsayılan olarak yapılara uygular Sequential . Sınıflar için değeri açıkça uygulamanız LayoutKind.Sequential gerekir. Tlbimp.exe (Tür Kitaplığı İçeri Aktarıcısı) özniteliğini de uygular StructLayoutAttribute ; tür kitaplığını içeri aktardığında her zaman değeri uygular LayoutKind.Sequential .

Oluşturucular

StructLayoutAttribute(Int16)

Belirtilen LayoutKind numaralandırma üyesiyle sınıfının yeni bir örneğini StructLayoutAttribute başlatır.

StructLayoutAttribute(LayoutKind)

Belirtilen LayoutKind numaralandırma üyesiyle sınıfının yeni bir örneğini StructLayoutAttribute başlatır.

Alanlar

CharSet

sınıfındaki dize veri alanlarının varsayılan olarak mı yoksa olarak LPWSTRLPSTR sıralanması gerektiğini gösterir.

Pack

Bellekteki bir sınıfın veya yapının veri alanlarının hizalamasını denetler.

Size

Sınıfın veya yapının mutlak boyutunu gösterir.

Özellikler

TypeId

Türetilmiş bir sınıfta uygulandığında, bu Attributeiçin benzersiz bir tanımlayıcı alır.

(Devralındığı yer: Attribute)
Value

Sınıfın LayoutKind veya yapının nasıl düzenlendiğini belirten değeri alır.

Yöntemler

Equals(Object)

Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.

(Devralındığı yer: Attribute)
GetHashCode()

Bu örneğe ilişkin karma kodu döndürür.

(Devralındığı yer: Attribute)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IsDefaultAttribute()

Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir.

(Devralındığı yer: Attribute)
Match(Object)

Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür.

(Devralındığı yer: Attribute)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Bir ad kümesini karşılık gelen bir dağıtma tanımlayıcısı kümesine eşler.

(Devralındığı yer: Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Bir arabirimin tür bilgilerini almak için kullanılabilecek bir nesnenin tür bilgilerini alır.

(Devralındığı yer: Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Bir nesnenin sağladığı tür bilgisi arabirimlerinin sayısını alır (0 ya da 1).

(Devralındığı yer: Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Bir nesne tarafından sunulan özelliklere ve yöntemlere erişim sağlar.

(Devralındığı yer: Attribute)

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.