Aracılığıyla paylaş


Yönetilen Sınıf Türü Bildirimi

Başvuru sınıf türü bildirme yolu C++ için Yönetilen Uzantılardan Visual C++ 2010'a değişmiştir.

Yönetilen Uzantılarda, başvuru sınıf türünün başında __gc anahtar sözcüğü vardır. Yeni sözdiziminde, __gc anahtar sözcüğü iki boşluklu anahtar sözcükten biriyle değiştirilir: ref class veya ref struct. struct veya class seçimi, türün gövdesinin ilk etiketlenmemiş bölümünde bildirilen üyeleri için genel (struct için) veya özel (class için) varsayılan erişim düzeyini belirtir.

Benzer şekilde, Yönetilen Uzantılarda, değer sınıf türünün başında __value anahtar sözcüğü vardır. Yeni sözdiziminde, __value anahtar sözcüğü iki boşluklu anahtar sözcükten biriyle değiştirilir: value class veya value struct.

Yönetilen Uzantılarda arayüz türü __interface anahtar sözcüğüyle gösterilirdi. Yeni sözdiziminde bu interface class ile değiştirildi.

Örneğin, aşağıdaki sınıf bildirimi Yönetilen Uzantılardan:

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

Yeni sözdizimi altında bu eşdeğer şekilde aşağıdaki gibi bildirilir:

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

Sınıfı Soyut olarak Belirtme

Yönetilen Uzantılar altında, __abstract anahtar sözcüğünü sınıfın eksik olduğunu ve programda sınıfın nesnelerinin oluşturulamayacağını belirtmek için class anahtar sözcüğünden önce (__gc'den önce veya sonra) koyarsınız.

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

Yeni sözdiziminde, abstract bağlamsal anahtar sözcüğünü sınıf adından sonra ve sınıf gövdesinden, temel sınıf türetme listesinden veya noktalı virgülden önce belirtirsiniz.

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

Tabiki sözdizimi anlamı değişmez.

Sınıfı Kapalı olarak Belirtme

Yönetilen Uzantılar altında, __sealed anahtar sözcüğünü sınıfın nesnelerinin şunlardan devralınamayacağını belirtmek için class anahtar sözcüğünden önce (__gc'den önce veya sonra) koyarsınız.

public __gc __sealed class String {};

Yeni sözdiziminde, sealed bağlamsal anahtar sözcüğünü sınıf adından sonra ve sınıf gövdesinden, temel sınıf türetme listesinden veya noktalı virgülden önce belirtirsiniz.

Sınıfı hem türetebilirsiniz hem kapatabilirsiniz. Örneğin, String sınıfı dolaylı olarak Object'ten türetilir. Sınıfı kapatmanın faydası, kapalı başvuru sınıf nesnesi üzerinden bütün sanal işlev çağrılarının statik çözümlemesini (yani derleme zamanında) desteklemesidir. Bu, sealed tanımlayıcısının, String izleme işleyicisinin çağrılan sanal yöntemi geçersiz kılan bir örnek sağlayabilecek sonradan türetilmiş bir sınıfa başvuru yapamayacağını garanti ettiğindendir. Aşağıda yeni sözdiziminde bir kapalı sınıf örneği vardır:

public ref class String sealed {};

Biri hem soyut hem kapalı olan bir sınıf belirtebilir, bu statik sınıfı gösteren özel durumdur. Bu CLR belgelerinde aşağıdaki gibi tanımlanmıştır:

"Hem abstract hem sealed olan bir tür sadece statik üyeler içermelidir ve baz dillerin isim uzayı dediği şeyler gibi hizmet etmelidir."

Örneğin, aşağıda Yönetilen Uzantılar sözdizimi kullanan soyut kapalı sınıf bildirimi vardır:

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

private:
   static bool ms_inParam;
};

ve şurda da bildirimin yeni sözdizimine çevrilmiş hali vardır:

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

private:
   static bool ms_inParam;
};

CLR Devralması: Taban Sınıfını Belirleme

CLR nesne modeli altında, sadece genel tek devralma desteklenmiştir. Ancak, Yönetilen Uzantılar, özel türetme belirten erişim anahtar sözcüğü olmayan ISO-C++ temel sınıf varsayılan yorumunu korumuştur. Bu, her CLR kalıtım bildiriminin varsayılan yorumlamayı geçersiz kılması için public anahtar sözcüğü kullanması gerektiği anlamına gelir.

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

Yeni sözdiziminde, erişim anahtar sözcüğünün yokluğu CLR kalıtım tanımında ortak türetmeyi belirtir. Bu sebeple, public erişim anahtar sözcüğü artık isteğe bağlıdır. C++ için Yönetilen Uzantılar kodunda herhangi bir değişikliği gerektirmemesine rağmen, bütünlük için bu değişikliği burada listeleyeceğim.

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

Ayrıca bkz.

Başvuru

Classes and Structs (Managed)

abstract (Visual C++)

sealed

Kavramlar

Yönetilen Türler (C++/CL)