Aracılığıyla paylaş


Değişikliklerin Anahattı

Bu anahat C++ için Yönetilen Uzantılar'dan Visual C++ 2010'a dildeki bazı değişikliklerin örneklerini gösterir. Daha fazla bilgi için her ögeyle verilen bağlantıyı izleyin.

Çift Altçizgili Anahtar Sözcükler Yok

Bir özel durum dışında, tüm anahtar sözcüklerin önünde çift alt çizgi kaldırılmıştır. Bu yüzden, __value value olur, __interface interface olur, vb. Anahtar sözcüklerle kullanıcı kodundaki tanımlayıcılar arasında ad çakışmalarından kaçınmak için, anahtar sözcükler öncelikle bağlamsal olarak değerlendirilir.

Daha fazla bilgi için bkz. Dil Anahtar Kelimeleri.

Sınıf Bildirimleri

Yönetilen Uzantılar sözdizimi:

__gc class Block {};                           // reference class
__value class Vector {};                       // value class
__interface I {};                        // interface class
__gc __abstract class Shape {};                // abstract class
__gc __sealed class Shape2D : public Shape {}; // derived class

Yeni sözdizimi:

ref class Block {};                // reference class
value class Vector {};             // value class
interface class I {};        // interface class
ref class Shape abstract {};       // abstract class
ref class Shape2D sealed: Shape{}; // derived class

Daha fazla bilgi için bkz: Yönetilen Türler (C++/CL).

Nesne Bildirimleri

Yönetilen Uzantılar sözdizimi:

public __gc class Form1 : public System::Windows::Forms::Form {
private:
   System::ComponentModel::Container __gc *components;
   System::Windows::Forms::Button   __gc *button1;
   System::Windows::Forms::DataGrid __gc *myDataGrid;   
   System::Data::DataSet  __gc *myDataSet;
};

Yeni sözdizimi:

public ref class Form1 : System::Windows::Forms::Form {
   System::ComponentModel::Container^ components;
   System::Windows::Forms::Button^ button1;
   System::Windows::Forms::DataGrid^ myDataGrid;
   System::Data::DataSet^ myDataSet;
};

Daha fazla bilgi için bkz: CLR Başvuru Sınıf Nesnesi Bildirimi.

Yönetilen Yığın Ayırma

Yönetilen Uzantılar sözdizimi:

Button* button1 = new Button; // managed heap
int *pi1 = new int;           // native heap
Int32 *pi2 = new Int32;       // managed heap

Yeni sözdizimi:

Button^ button1 = gcnew Button;        // managed heap
int * pi1 = new int;                   // native heap
Int32^ pi2 = gcnew Int32;              // managed heap

Daha fazla bilgi için bkz: CLR Başvuru Sınıf Nesnesi Bildirimi.

Olmayan Nesneye İzleme Başvurusu

Yönetilen Uzantılar sözdizimi:

// OK: we set obj to refer to no object
Object * obj = 0;

// Error: no implicit boxing
Object * obj2 = 1;

Yeni sözdizimi:

// Incorrect Translation
// causes the implicit boxing of both 0 and 1
Object ^ obj = 0;
Object ^ obj2 = 1;

// Correct Translation
// OK: we set obj to refer to no object
Object ^ obj = nullptr;

// OK: we initialize obj2 to an Int32^
Object ^ obj2 = 1;

Daha fazla bilgi için bkz. CLR Başvuru Sınıf Nesnesi Bildirimi.

Dizi Bildirimi

CLR dizisi yeniden tasarlanmıştır. stl vector şablon topluluğuna benzerdir, ama arka plandaki System::Array sınıfına eşler - başka bir deyişle, şablon uygulaması değildir.

Daha fazla bilgi için bkz: CLR Dizisi Bildirimi.

Parametre olarak Dizi

Yönetilen Uzantılar dizi sözdizimi:

void PrintValues( Object* myArr __gc[]); 
void PrintValues( int myArr __gc[,,]); 

Yeni dizi sözdizimi:

void PrintValues( array<Object^>^ myArr );
void PrintValues( array<int,3>^ myArr );

Dönüş Türü olarak Dizi

Yönetilen Uzantılar dizi sözdizimi:

Int32 f() []; 
int GetArray() __gc[];

Yeni dizi sözdizimi:

array<Int32>^ f();
array<int>^ GetArray();

Yerel CLR Dizisinin Kısayol Başlatma

Yönetilen Uzantılar dizi sözdizimi:

int GetArray() __gc[] {
   int a1 __gc[] = { 1, 2, 3, 4, 5 };
   Object* myObjArray __gc[] = { __box(26), __box(27), __box(28),
                                 __box(29), __box(30) };

   return a1;
}

Yeni dizi sözdizimi:

array<int>^ GetArray() {
   array<int>^ a1 = {1,2,3,4,5};
   array<Object^>^ myObjArray = {26,27,28,29,30};

   return a1;
}

Açık CLR Dizi Bildirimi

Yönetilen Uzantılar dizi sözdizimi:

Object* myArray[] = new Object*[2];
String* myMat[,] = new String*[4,4];

Yeni dizi sözdizimi:

array<Object^>^ myArray = gcnew array<Object^>(2);
array<String^,2>^ myMat = gcnew array<String^,2>(4,4);

Dilde yenilik: gcnew'i izleyen açık dizi başlatma

// explicit initialization list follow gcnew 
// is not supported in Managed Extensions
array<Object^>^ myArray = 
   gcnew array<Object^>(4){ 1, 1, 2, 3 };

Ölçekli Özellikler

Yönetilen Uzantılar özellik sözdizimi:

public __gc __sealed class Vector {
   double _x;

public:
   __property double get_x(){ return _x; }
   __property void set_x( double newx ){ _x = newx; }
};

Yeni özellik sözdizimi:

public ref class Vector sealed { 
   double _x;

public:
   property double x 
   {
      double get()             { return _x; }
      void   set( double newx ){ _x = newx; }
   } // Note: no semi-colon …
};

Dilde yenilik: önemsiz özellikler

public ref class Vector sealed { 
public:
   // equivalent shorthand property syntax
   // backing store is not accessible
   property double x; 
};

Daha fazla bilgi için bkz. Özellik Bildirimi.

Dizinli Özellikler

Yönetilen Uzantılar dizinli özellik sözdizimi:

public __gc class Matrix {
   float mat[,];

public: 
   __property void set_Item( int r, int c, float value) { mat[r,c] = value; }
   __property int get_Item( int r, int c ) { return mat[r,c]; }
};

Yeni dizinli özellik sözdizimi:

public ref class Matrix {
   array<float, 2>^ mat;

public:
   property float Item [int,int] {
      float get( int r, int c ) { return mat[r,c]; }
      void set( int r, int c, float value ) { mat[r,c] = value; }
   }
};

Dilde yenilik: sınıf düzeyinde dizinli özellik

public ref class Matrix {
   array<float, 2>^ mat;

public:
   // ok: class level indexer now
   //     Matrix mat;
   //     mat[ 0, 0 ] = 1; 
   //
   // invokes the set accessor of the default indexer

   property float default [int,int] {
      float get( int r, int c ) { return mat[r,c]; }
      void set( int r, int c, float value ) { mat[r,c] = value; }
   }
};

Daha fazla bilgi için bkz. Özellik Dizini Bildirimi.

Yüklenmiş İşleçler

Yönetilen Uzantılar işlev aşırı yüklemesi sözdizimi:

public __gc __sealed class Vector {
public:
   Vector( double x, double y, double z );

   static bool    op_Equality( const Vector*, const Vector* );
   static Vector* op_Division( const Vector*, double );
};

int main() {
   Vector *pa = new Vector( 0.231, 2.4745, 0.023 );
   Vector *pb = new Vector( 1.475, 4.8916, -1.23 ); 

   Vector *pc = Vector::op_Division( pa, 4.8916 );

   if ( Vector::op_Equality( pa, pc ))
      ;
}

Yeni işleç aşırı yüklemesi sözdizimi:

public ref class Vector sealed {
public:
   Vector( double x, double y, double z );

   static bool    operator ==( const Vector^, const Vector^ );
   static Vector^ operator /( const Vector^, double );
};

int main() {
   Vector^ pa = gcnew Vector( 0.231, 2.4745, 0.023 );
   Vector^ pb = gcnew Vector( 1.475, 4.8916, -1.23 );

   Vector^ pc = pa / 4.8916;
   if ( pc == pa )
      ;
}

Daha fazla bilgi için bkz. Yüklenmi? Y?leçler.

Dönüştürme İşleçleri

Yönetilen Uzantılar dönüştürme işleci sözdizimi:

__gc struct MyDouble {
   static MyDouble* op_Implicit( int i ); 
   static int op_Explicit( MyDouble* val );
   static String* op_Explicit( MyDouble* val ); 
};

Yeni dönüştürme işleci sözdizimi:

ref struct MyDouble {
public:
   static operator MyDouble^ ( int i );
   static explicit operator int ( MyDouble^ val );
   static explicit operator String^ ( MyDouble^ val );
};

Daha fazla bilgi için bkz. Dönüştürme İşleçlere Değiştirme.

Arayüz Üyesini Açık Geçersiz Kılma

Yönetilen Uzantılar açık geçersiz kılma sözdizimi:

public __gc class R : public ICloneable {
   // to be used through ICloneable
   Object* ICloneable::Clone();

   // to be used through an R
   R* Clone();
};

Yeni açık geçersiz kılma sözdizimi:

public ref class R : public ICloneable {
   // to be used through ICloneable
   virtual Object^ InterfaceClone() = ICloneable::Clone;

   // to be used through an R 
   virtual R^ Clone();
};

Daha fazla bilgi için bkz. Arayüz Üyesini Açık Geçersiz Kılma.

Özel Sanal İşlevler

Yönetilen Uzantılar özel sanal işlev sözdizimi:

__gc class Base {
private:
   // inaccessible to a derived class
   virtual void g(); 
};

__gc class Derived : public Base {
public:
   // ok: g() overrides Base::g()
   virtual void g();
};

Yeni özel sanal işlev sözdizimi:

ref class Base {
private:
   // inaccessible to a derived class
   virtual void g(); 
};

ref class Derived : public Base {
public:
   // error: cannot override: Base::g() is inaccessible
   virtual void g() override;
};

Daha fazla bilgi için bkz. Özel Sanal İşlevler.

CLR Numaralandırma Türü

Yönetilen Uzantılar numaralandırma sözdizimi:

__value enum e1 { fail, pass };
public __value enum e2 : unsigned short  { 
   not_ok = 1024, 
   maybe, ok = 2048 
};  

Yeni numaralandırma sözdizimi:

enum class e1 { fail, pass };
public enum class e2 : unsigned short { 
   not_ok = 1024,
   maybe, ok = 2048 
};

Bu küçük sözdizimi değişikliğinden ayrı olarak, CLR numaralandırma türünün davranışı çeşitli yollarla değişmiştir:

  • CLR numaralandırmasının ileriye dönük bildirimi artık desteklenmemektedir.

  • Yerleşik aritmetik türleri ve Object sınıf hiyerarşisi arasında aşırı yükleme çözünürlüğü Yönetilen Uzantılar ve Visual C++ 2010 arasında ters çevrilmiştir. Yan etki olarak, CLR numaralandırmaları artık dolaylı olarak aritmetik türlere dönüştürülmez.

  • Yeni sözdiziminde, CLR numaralaması kendi kapsamını tutar, ve bu Yönetilen Uzantılar için böyle değildir. Önceden, numaralandırıcılar içerme kapsamında görünebilirdi; şimdi numaralandırıcılar, numaralandırıcının kapsamı içerisinde kapsüllenmiştir.

Daha fazla bilgi için bkz.CLR Enum Türü.

__box Anahtar Sözcüğünün Kaldırılması

Yönetilen Uzantılar kutulama sözdizimi:

Object *o = __box( 1024 ); // explicit boxing

Yeni kutulama sözdizimi:

Object ^o = 1024; // implicit boxing

Daha fazla bilgi için bkz. Paketlenmiş Değere İzleme İşleyicisi.

Sabitleme İşaretçisi

Yönetilen Uzantılar sabitleme işaretçisi sözdizimi:

__gc struct H { int j; };

int main() {
   H * h = new H;
   int __pin * k = & h -> j;
};

Yeni sabitleme işaretçisi sözdizimi:

ref struct H { int j; };

int main() {
   H^ h = gcnew H;
   pin_ptr<int> k = &h->j;
}

Daha fazla bilgi için bkz. Değer Türleri Anlamları.

__typeof Anahtar Sözcüğü typeid Oldu

Yönetilen Uzantılar typeof sözdizimi:

Array* myIntArray = 
   Array::CreateInstance( __typeof(Int32), 5 );

Yeni typeid sözdizimi:

Array^ myIntArray = 
   Array::CreateInstance( Int32::typeid, 5 );

Daha fazla bilgi için bkz. typeof T::typeid'ye gider.

Ayrıca bkz.

Kavramlar

C++/CLI Geçiş Öncüsü

Managed Extensions for C++ Syntax Upgrade Checklist

Language Features for Targeting the CLR