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++ 2010.
No Managed Extensions, 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 or ref struct. A opção 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, no Managed Extensions, 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 or 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 extensões gerenciadas, colocar a palavra-chave __abstract antes de class palavra-chave (antes ou após a __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, que você especificar o abstract palavra-chave contextual após o nome da classe e antes de ambos o corpo da classe base lista de derivação de classe, ou ponto e vírgula.
public ref class Shape abstract {};
public ref class Shape2D abstract : public Shape{};
Obviamente, o significado semântico é alterado.
Especificando a classe como Sealed
Em extensões gerenciadas, colocar 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, que você especificar o sealed palavra-chave contextual após o nome da classe e antes de ambos o corpo da classe base lista de derivação de classe, ou ponto e vírgula.
Você pode derivar uma classe e lacre. Por exemplo, o String classe é implicitamente derivado da 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 de referência lacrado. Isso ocorre porque o sealed especificador garante que o String identificador de controle não pode se referir a uma classe derivada subseqüentemente pode fornecer uma instância de substituição do método virtual que está sendo chamado. Aqui está um exemplo de uma classe selada na nova sintaxe:
public ref class String sealed {};
Um também pode especificar uma classe como ambos abstrato e selado – essa é uma condição especial que indica 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 a alguns idiomas chamam um namespace."
Por exemplo, aqui está uma declaração de uma classe selada 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á a 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: Especificando a classe Base
Em um modelo de objeto CLR, somente herança única pública é suportada. No entanto, o Managed Extensions 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 {};
Na 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 código de qualquer modificação de Managed Extensions for C++, lista essa alteração para a integridade.
// New syntax: ok: defaults to public derivation
ref class Derived : Base{};