Type.IsLayoutSequential Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.