Type.StructLayoutAttribute Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene una clase StructLayoutAttribute que describe el diseño del tipo actual.
public:
virtual property System::Runtime::InteropServices::StructLayoutAttribute ^ StructLayoutAttribute { System::Runtime::InteropServices::StructLayoutAttribute ^ get(); };
public virtual System.Runtime.InteropServices.StructLayoutAttribute? StructLayoutAttribute { get; }
public virtual System.Runtime.InteropServices.StructLayoutAttribute StructLayoutAttribute { get; }
member this.StructLayoutAttribute : System.Runtime.InteropServices.StructLayoutAttribute
Public Overridable ReadOnly Property StructLayoutAttribute As StructLayoutAttribute
Valor de propiedad
Obtiene una clase StructLayoutAttribute que describe las características de diseño generales del tipo actual.
Excepciones
El método invocado no se admite en la clase base.
Ejemplos
En el ejemplo de código siguiente se define primero una clase, una estructura y una estructura con atributos de diseño especiales (las estructuras están anidadas dentro de la clase ). A continuación, en el ejemplo se usa la StructLayoutAttribute propiedad para obtener un StructLayoutAttribute para cada tipo y se muestran las propiedades de los atributos.
using namespace System;
using namespace System::Runtime::InteropServices;
value struct Test1
{
public:
Byte B1;
short S;
Byte B2;
};
[StructLayout(LayoutKind::Explicit,Pack=1)]
value struct Test2
{
public:
[FieldOffset(0)]
Byte B1;
[FieldOffset(1)]
short S;
[FieldOffset(3)]
Byte B2;
};
static void DisplayLayoutAttribute( StructLayoutAttribute^ sla )
{
Console::WriteLine( L"\r\nCharSet: {0}\r\n Pack: {1}\r\n Size: {2}\r\n Value: {3}", sla->CharSet, sla->Pack, sla->Size, sla->Value );
}
int main()
{
DisplayLayoutAttribute( Test1::typeid->StructLayoutAttribute );
return 0;
}
using System;
using System.Runtime.InteropServices;
public class Example
{
public static void Main()
{
DisplayLayoutAttribute(typeof(Example).StructLayoutAttribute);
DisplayLayoutAttribute(typeof(Test1).StructLayoutAttribute);
DisplayLayoutAttribute(typeof(Test2).StructLayoutAttribute);
}
private static void DisplayLayoutAttribute(StructLayoutAttribute sla)
{
Console.WriteLine("\r\nCharSet: "+sla.CharSet.ToString()+"\r\n Pack: "+sla.Pack.ToString()+"\r\n Size: "+sla.Size.ToString()+"\r\n Value: "+sla.Value.ToString());
}
public struct Test1
{
public byte B1;
public short S;
public byte B2;
}
[StructLayout(LayoutKind.Explicit, Pack=1)] public struct Test2
{
[FieldOffset(0)] public byte B1;
[FieldOffset(1)] public short S;
[FieldOffset(3)] public byte B2;
}
}
open System.Runtime.InteropServices
type Example = class end
[<Struct>]
type Test1 =
val B1 : byte
val S : int16
val B2 : byte
[<Struct; StructLayout(LayoutKind.Explicit, Pack=1)>]
type Test2 =
[<FieldOffset 0>] val B1 : byte
[<FieldOffset 1>] val S : int16
[<FieldOffset 3>] val B2 : byte
let displayLayoutAttribute (sla: StructLayoutAttribute) =
printfn $"\nCharSet: {sla}\n Pack: {sla.Pack}\n Size: {sla.Size}\n Value: {sla.Value}"
displayLayoutAttribute typeof<Example>.StructLayoutAttribute
displayLayoutAttribute typeof<Test1>.StructLayoutAttribute
displayLayoutAttribute typeof<Test2>.StructLayoutAttribute
Imports System.Runtime.InteropServices
Public Class Example
Public Shared Sub Main()
DisplayLayoutAttribute(GetType(Example).StructLayoutAttribute)
DisplayLayoutAttribute(GetType(Test1).StructLayoutAttribute)
DisplayLayoutAttribute(GetType(Test2).StructLayoutAttribute)
End Sub
Private Shared Sub DisplayLayoutAttribute( _
ByVal sla As StructLayoutAttribute)
Console.WriteLine(vbCrLf & "CharSet: " & sla.CharSet.ToString() _
& vbCrLf & " Pack: " & sla.Pack.ToString() _
& vbCrLf & " Size: " & sla.Size.ToString() _
& vbCrLf & " Value: " & sla.Value.ToString())
End Sub
Public Structure Test1
Public B1 As Byte
Public S As Short
Public B2 As Byte
End Structure
<StructLayout(LayoutKind.Explicit, Pack:=1)> _
Public Structure Test2
<FieldOffset(0)> Public B1 As Byte
<FieldOffset(1)> Public S As Short
<FieldOffset(3)> Public B2 As Byte
End Structure
End Class
Comentarios
StructLayoutAttribute el método no devuelve GetCustomAttributes . En su lugar, use esta propiedad para obtenerla.