Udostępnij za pośrednictwem


Deklaracja zarządzanego typu klasy

Sposób deklarowania typu klasy odwołania zmieniony z rozszerzenia zarządzane dla języka C++ do Visual C++.

W zarządzanych rozszerzeń jest poprzedzona typem odwołania klasy __gc słowa kluczowego.W nowych składni __gc słowo kluczowe jest zastępowana przez jedną z dwa rozmieszczone słowa kluczowe: ref class lub ref struct.Wybór struct lub class wskazuje publicznego (dla struct) lub prywatną (dla class) domyślny poziom dostępu do swoich członków zadeklarowanych w początkowej bez etykiety części ciała tego typu.

Podobnie, w polu zarządzane rozszerzenia typu klasy wartości jest poprzedzony __value słowa kluczowego.W nowych składni __value słowo kluczowe jest zastępowana przez jedną z dwa rozmieszczone słowa kluczowe: value class lub value struct.

Typ interfejsu, do zarządzanych rozszerzeń wskazano ze słowem kluczowym __interface.W nowych składni zostanie zastąpiony wartością interface class.

Na przykład, poniżej przedstawiono deklaracje klas w zarządzanych rozszerzeń:

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

W obszarze nowe elementy składni te są równoważnie zadeklarowane w następujący sposób:

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

Określającego klasę jako abstrakcyjna

W obszarze zarządzane rozszerzenia, umieścić słowo kluczowe __abstract przed class słowa kluczowego (przed lub po __gc) oznacza, że klasa jest niekompletne i że nie można tworzyć obiektów klasy w ramach programu:

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

Po wybraniu nowej składni można określić abstract kontekstowych słowa kluczowego po klasie nazwisko i przed treści klasy, klasy podstawowej wyprowadzenie listy lub średnika.

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

Oczywiście znaczenie semantyczne pozostaje niezmieniona.

Określanie klasę zamknięte

W obszarze zarządzane rozszerzenia, umieścić słowo kluczowe __sealed przed class słowa kluczowego (przed lub po __gc) do wskazania, że obiekty klasy nie może być dziedziczona z:

public __gc __sealed class String {};

Po wybraniu nowej składni można określić sealed kontekstowych słowa kluczowego po klasie nazwisko i przed treści klasy, klasy podstawowej wyprowadzenie listy lub średnika.

Zarówno może pochodzić od klasy i zamknąć go.Na przykład String niejawnie pochodną klasy Object.Zaletą plombowania klasy jest obsługuje rozdzielczość statycznych (czyli w czasie kompilacji) wszystkich wywołań funkcji wirtualnych za pośrednictwem obiektu klasy zapieczętowane odnośne.To dlatego, sealed specyfikator gwarantuje, że String śledzenia uchwyt nie może odwoływać się do następnie pochodne klasy, która może zawierać wystąpienie nadrzędne wirtualnego metoda jest wywoływana.Oto przykład klasy zapieczętowanej w nowe elementy składni:

public ref class String sealed {};

Jeden można również określić klasy jako zarówno abstrakcyjne i opieczętowane — jest to specjalnego warunku, który wskazuje klasy statycznej.To jest opisane w dokumentacji CLR w następujący sposób:

"A to znaczy wpisać zarówno abstract i sealed powinien posiadać elementy tylko statyczne i służy jako co w przypadku niektórych języków wywołania przestrzeni nazw."

Na przykład tutaj jest deklaracja klasy abstrakcyjnej zamkniętych przy użyciu składni zarządzane rozszerzenia:

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

private:
   static bool ms_inParam;
};

a Oto tej deklaracji przetłumaczone na nowe elementy składni:

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

private:
   static bool ms_inParam;
};

Dziedziczenie CLR: Określanie klasy podstawowej

W modelu obiektu CLR publicznych pojedynczego dziedziczenia jest obsługiwany.Rozszerzenia zarządzane zachowywane ISO C++ interpretacji domyślne klasy podstawowej bez słowa kluczowego dostępu jak określanie wyprowadzenie prywatnych.Oznacza to, że każda deklaracja dziedziczenia CLR zapewnienie public słowo kluczowe, aby zastąpić domyślny interpretacji.

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

W nowej definicji składni Brak dostępu do słowa kluczowego wskazuje publicznych wyprowadzenie w definicji dziedziczenia CLR.Tak więc public dostępu do słowa kluczowego teraz jest opcjonalne.Chociaż to nie wymagało żadnych modyfikacji zarządzanych rozszerzeń dla kodu C++, mogę wystawić na tę zmianę w tym miejscu pod względem kompletności.

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

Zobacz też

Informacje

Klasy i strukturach (zarządzanych)

streszczenie (Visual C++)

zapieczętowane

Koncepcje

Typy zarządzane (C++/CL)