Compartilhar via


Declaração de um tipo de classe gerenciada

A maneira de declarar um tipo de classe de referência alterado de Managed Extensions for C++ para Visual C++.

Em gerenciado extensões, um tipo de classe de referência é antecedido com o __gc palavra-chave.Na sintaxe de novo, o __gc palavra-chave é substituído por uma das duas palavras-chave espaçadas: ref class ou ref struct.A escolha de struct ou class indica o público (para struct) ou particular (para class) o nível de acesso padrão de seus membros declarados em uma seção sem rótulo inicial do corpo do tipo.

Da mesma forma, nas gerenciado extensões, um tipo de classe de valor é antecedido com o __value palavra-chave.Na sintaxe de novo, o __value palavra-chave é substituído por uma das duas palavras-chave espaçadas: value class ou value struct.

Um tipo de interface, Managed Extensions foi indicado com a palavra-chave __interface.A nova sintaxe, este será substituído por interface class.

Por exemplo, as seguintes declarações de classe no Managed Extensions:

public __gc class Block {};     // reference class
public __value class Vector {}; // value class
public __interface IFooBar {};  // interface class

Sob a nova sintaxe esses forma equivalente declarados da seguinte maneira:

public ref class Block {};         // reference class
public value class Vector {};      // value class
public interface class IFooBar {}; // interface class

Especificando a classe como abstrata

Em gerenciado extensões, você coloca a palavra-chave __abstract antes de class palavra-chave (antes ou depois de __gc) para indicar que a classe está incompleta e que os objetos da classe não podem ser criados dentro do programa:

public __gc __abstract class Shape {};
public __gc __abstract class Shape2D: public Shape {};

Sob a nova sintaxe, você especificar o abstract palavra-chave contextual seguindo a classe e nome antes de corpo de classe, lista de derivação da classe base ou ponto e vírgula.

public ref class Shape abstract {};
public ref class Shape2D abstract : public Shape{};

Obviamente, o significado semântico é inalterado.

Especificando a classe como lacrados

Em gerenciado extensões, você coloca a palavra-chave __sealed antes de class palavra-chave (antes ou depois de __gc) para indicar que os objetos da classe não podem ser herdados de:

public __gc __sealed class String {};

Sob a nova sintaxe, você especificar o sealed palavra-chave contextual seguindo a classe e nome antes de corpo de classe, lista de derivação da classe base ou ponto e vírgula.

Você pode derivar uma classe e lacre.Por exemplo, o String classe implicitamente é derivada de Object.O benefício de fechamento de uma classe é que ele oferece suporte a resolução estática (isto é, em tempo de compilação) de todas as chamadas de função virtual através do objeto de classe sealed referência.Isso ocorre porque o sealed especificador garante que o String identificador de controle não pode se referir a uma classe derivada, subseqüentemente, que pode fornecer uma instância de substituição do método virtual que está sendo chamado.Eis um exemplo de uma classe selada nova sintaxe:

public ref class String sealed {};

Um também pode especificar uma classe como ambos os abstrato e selado – esta é uma condição especial que indica que uma classe estática.Isso é descrito na documentação do CLR da seguinte maneira:

"Um tipo ambos de abstract e sealed deve tem apenas membros estáticos e serve como o que alguns idiomas chamar um namespace."

Por exemplo, aqui está uma declaração de uma classe sealed abstrata usando a sintaxe de Managed Extensions:

public __gc __sealed __abstract class State {
public:
   static State() {}
   static bool inParamList();

private:
   static bool ms_inParam;
};

e aqui está essa declaração traduzida para a nova sintaxe:

public ref class State abstract sealed {
public:
   static State();
   static bool inParamList();

private:
   static bool ms_inParam;
};

Herança de CLR: Especifica a classe Base

Em modelo de objeto CLR, é suportada somente herança única pública.No entanto, gerenciado extensões mantidos a interpretação do padrão ISO C++ de uma classe base sem uma palavra-chave de acesso como especificando uma derivação particular.Isso significava que tinha cada declaração de herança do CLR fornecer o public palavra-chave para substituir a interpretação do padrão.

// Managed Extensions: error: defaults to private derivation
__gc class Derived : Base {};

A nova definição de sintaxe, a ausência de uma palavra-chave de acesso indica uma derivação pública em uma definição de herança do CLR.Assim, o public palavra-chave de acesso agora é opcional.Enquanto isso não requer qualquer modificação de Managed Extensions for C++ de código, posso listar essa alteração de abrangência.

// New syntax: ok: defaults to public derivation
ref class Derived : Base{};

Consulte também

Referência

Classes e Estruturas (Extensões de Componentes C++)

abstrata (Extensões de Componentes C++)

autenticada (Extensões de Componentes C++)

Conceitos

Tipos gerenciados (C + + CL)