Partilhar via


Type.IsLayoutSequential Propriedade

Definição

Obtém um valor que indica se os campos do tipo atual são dispostos sequencialmente, na ordem em que foram definidos ou emitidos para os metadados.

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

Valor da propriedade

true se a Attributes propriedade do tipo atual incluir SequentialLayout; caso contrário, false.

Implementações

Exemplos

O exemplo a seguir cria uma instância de uma classe para a qual o LayoutKind.Sequential valor de enumeração na StructLayoutAttribute classe foi definido, verifica a IsLayoutSequential propriedade e exibe o resultado.

using System;
using System.Reflection;
using System.ComponentModel;
using System.Runtime.InteropServices;
class MyTypeSequential1
{
}
[StructLayoutAttribute(LayoutKind.Sequential)]
class MyTypeSequential2
{
    public static void Main(string []args)
    {
        try
        {
            // Create an instance of myTypeSeq1.
            MyTypeSequential1 myObj1 = new MyTypeSequential1();
            Type myTypeObj1 = myObj1.GetType();
            // Check for and display the SequentialLayout attribute.
            Console.WriteLine("\nThe object myObj1 has IsLayoutSequential: {0}.", myObj1.GetType().IsLayoutSequential);
            // Create an instance of 'myTypeSeq2' class.
            MyTypeSequential2 myObj2 = new MyTypeSequential2();
            Type myTypeObj2 = myObj2.GetType();
            // Check for and display the SequentialLayout attribute.
            Console.WriteLine("\nThe object myObj2 has IsLayoutSequential: {0}.", myObj2.GetType().IsLayoutSequential);
        }
        catch(Exception e)
        {
            Console.WriteLine("\nAn exception occurred: {0}", e.Message);
        }
    }
}
open System.Runtime.InteropServices

type MyTypeSequential1 = struct end

[<StructLayoutAttribute(LayoutKind.Sequential)>]
type MyTypeSequential2 = struct end

try
    // Create an instance of myTypeSeq1.
    let myObj1 = MyTypeSequential1()
    let myTypeObj1 = myObj1.GetType()
    // Check for and display the SequentialLayout attribute.
    printfn $"\nThe object myObj1 has IsLayoutSequential: {myTypeObj1.IsLayoutSequential}."
    // Create an instance of 'myTypeSeq2' class.
    let myObj2 = MyTypeSequential2()
    let myTypeObj2 = myObj2.GetType()
    // Check for and display the SequentialLayout attribute.
    printfn $"\nThe object myObj2 has IsLayoutSequential: {myTypeObj2.IsLayoutSequential}."
with e ->
    printfn $"\nAn exception occurred: {e.Message}"
Imports System.Reflection
Imports System.ComponentModel
Imports System.Runtime.InteropServices

Class MyTypeSequential1
End Class
<StructLayoutAttribute(LayoutKind.Sequential)> Class MyTypeSequential2
    Public Shared Sub Main()
        Try
            ' Create an instance of MyTypeSequential1.
            Dim myObj1 As New MyTypeSequential1()
            Dim myTypeObj1 As Type = myObj1.GetType()
            ' Check for and display the SequentialLayout attribute.
            Console.WriteLine(ControlChars.Cr + "The object myObj1 has IsLayoutSequential: {0}.", myObj1.GetType().IsLayoutSequential.ToString())
            ' Create an instance of MyTypeSequential2.
            Dim myObj2 As New MyTypeSequential2()
            Dim myTypeObj2 As Type = myObj2.GetType()
            ' Check for and display the SequentialLayout attribute.
            Console.WriteLine(ControlChars.Cr + "The object myObj2 has IsLayoutSequential: {0}.", myObj2.GetType().IsLayoutSequential.ToString())
        Catch e As Exception
            Console.WriteLine(ControlChars.Cr + "An exception occurred: {0}", e.Message.ToString())
        End Try
    End Sub
End Class

Comentários

Essa propriedade é fornecida como uma conveniência. Como alternativa, você pode usar o valor de TypeAttributes.LayoutMask enumeração para selecionar os atributos de layout de tipo e, em seguida, testar se TypeAttributes.SequentialLayout está definido. Os TypeAttributes.AutoLayoutvalores , TypeAttributes.ExplicitLayoute enumeração TypeAttributes.SequentialLayout indicam a maneira como os campos do tipo são dispostos na memória.

Para tipos dinâmicos, você pode especificar TypeAttributes.SequentialLayout ao criar o tipo. No código, aplique o StructLayoutAttribute atributo com o LayoutKind.Sequential valor de enumeração ao tipo, para especificar que o layout é sequencial.

Observação

Você não pode usar o GetCustomAttributes método para determinar se ele StructLayoutAttribute foi aplicado a um tipo.

Para obter mais informações, consulte a seção 9.1.2 da especificação da documentação da CLI (Common Language Infrastructure), "Partição II: Definição e Semântica de Metadados".

Se a corrente Type representar um tipo genérico construído, essa propriedade se aplicará à definição de tipo genérico da qual o tipo foi construído. Por exemplo, se a atual Type representa MyGenericType<int> (MyGenericType(Of Integer) no Visual Basic), o valor dessa propriedade é determinado por MyGenericType<T>.

Se a corrente Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico, essa propriedade sempre retornará false.

Aplica-se a

Confira também