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++)