Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A sintaxe para declarar, instanciar e inicializar uma matriz gerenciada foi alterado de gerenciado Extensions para C++ para Visual C++ 2008.
A declaração de um objeto de matriz do CLR no gerenciado Extensions era uma extensão de declaração de array padrão no qual um __gc palavra-chave foi colocada entre o nome do objeto matriz e sua dimensão possivelmente preenchido de vírgula, sistema autônomo no seguinte emparelhar de exemplos:
void PrintValues( Object* myArr __gc[]);
void PrintValues( int myArr __gc[,,]);
Isso foi simplificado a nova sintaxe, que usamos uma declaração semelhante ao modelo semelhante à STL vector declaração. O primeiro parâmetro indica o tipo de elemento.O segundo parâmetro especifica a dimensão de matriz (com um valor padrão de 1, para que somente várias dimensões requerem um segundo argumento).O próprio objeto de matriz é uma alça de acompanhamento e portanto deve ser fornecido um chapéu.Se o tipo de elemento também for um tipo de referência, ele também requer um chapéu.Por exemplo, o exemplo acima, quando expresso na nova sintaxe é da seguinte maneira:
void PrintValues( array<Object^>^ myArr );
void PrintValues( array<int,3>^ myArr );
sistema autônomo um tipo de referência é uma alça de acompanhamento em vez de um objeto, é possível especificar uma matriz CLR sistema autônomo o tipo de retorno de uma função.(Em contraste, não é possível especificar o array nativo sistema autônomo o tipo de retorno de uma função.) A sintaxe para fazer isso de gerenciado Extensions foi um pouco não intuitiva.Por exemplo:
Int32 f() [];
int GetArray() __gc[];
In Visual C++ 2008, a declaração é muito mais simples. Por exemplo,
array<Int32>^ f();
array<int>^ GetArray();
A inicialização de forma abreviada de local gerenciado array é suportada em ambas as versões do linguagem.Por exemplo:
int GetArray() __gc[] {
int a1 __gc[] = { 1, 2, 3, 4, 5 };
Object* myObjArray __gc[] = {
__box(26), __box(27), __box(28), __box(29), __box(30)
};
return a1;
}
é simplificado consideravelmente na nova sintaxe (Observe que como conversão boxing é implícito na sintaxe de novo, a __box operador foi eliminado – consulte Tipos de valor e seus comportamentos Para obter mais informações):
array<int>^ GetArray() {
array<int>^ a1 = {1,2,3,4,5};
array<Object^>^ myObjArray = {26,27,28,29,30};
return a1;
}
Como uma matriz é um tipo de referência do CLR, a declaração de cada objeto matriz é uma alça de acompanhamento.Portanto, objetos de matriz devem ser alocados no heap CLR.(Notação abreviada oculta a alocação de heap gerenciado.) Aqui está a forma explícita de uma inicialização de objeto array em gerenciado Extensions:
Object* myArray[] = new Object*[2];
String* myMat[,] = new String*[4,4];
Sob a nova sintaxe, a new expressão é substituído por gcnew. sistema autônomo tamanhos de dimensão são passados sistema autônomo parâmetros para o gcnew expressão da seguinte maneira:
array<Object^>^ myArray = gcnew array<Object^>(2);
array<String^,2>^ myMat = gcnew array<String^,2>(4,4);
Na sintaxe de novo, uma lista de inicialização explícita pode seguir o gcnew expressão; isso não era suportado em extensões gerenciadas. Por exemplo:
// explicit initialization list following gcnew
// was not supported in Managed Extensions
array<Object^>^ myArray =
gcnew array<Object^>(4){ 1, 1, 2, 3 };