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 apresentados em sequência, 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 ; caso SequentialLayout contrário, false
.
Implementações
Exemplos
O exemplo a seguir cria uma instância de uma classe para a qual o valor de enumeração na classe foi definido, verifica a propriedade e LayoutKind.Sequential StructLayoutAttribute exibe o IsLayoutSequential resultado.
#using <System.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::ComponentModel;
using namespace System::Runtime::InteropServices;
ref class MyTypeSequential1{};
[StructLayoutAttribute(LayoutKind::Sequential)]
ref class MyTypeSequential2{};
int main()
{
try
{
// Create an instance of myTypeSeq1.
MyTypeSequential1^ myObj1 = gcnew MyTypeSequential1;
// 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 = gcnew MyTypeSequential2;
// 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 );
}
}
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);
}
}
}
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 enumeração para selecionar os atributos de layout de tipo e, em TypeAttributes.LayoutMask seguida, testar se TypeAttributes.SequentialLayout está definido. Os valores de enumeração , e indicam a maneira como os TypeAttributes.AutoLayout campos do tipo são colocados na TypeAttributes.ExplicitLayout TypeAttributes.SequentialLayout memória.
Para tipos dinâmicos, você pode TypeAttributes.SequentialLayout especificar ao criar o tipo. No código, aplique o StructLayoutAttribute atributo com o valor de enumeração ao tipo , para especificar que o layout é LayoutKind.Sequential sequencial.
Observação
Não é possível usar GetCustomAttributes o método para determinar se o foi aplicado a um StructLayoutAttribute 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 de metadados e semântica". A documentação está disponível online; confira ECMA C# and Common Language Infrastructure Standards, no MSDN, e Standard ECMA-335 - Common Language Infrastructure (CLI), no site internacional da Ecma.
Caso o Type atual represente um tipo genérico construído, esta propriedade aplica-se à definição de tipo genérico a partir da qual o tipo foi construído. Por exemplo, se o Type atual representar MyGenericType<int>
(MyGenericType(Of Integer)
no Visual Basic), o valor dessa propriedade será determinado por MyGenericType<T>
.
Caso o Type atual represente um parâmetro de tipo na definição de um tipo genérico ou um método genérico, esta propriedade sempre retorna false
.