Tür sistemine genel bakış (C++/CX)
Windows Çalışma Zamanı mimarisini kullanarak uygulamaları ve bileşenleri yazmak için C++/WinRT, C++/CX, Visual Basic, Visual C# ve JavaScript kullanabilirsiniz. Windows API'sine doğrudan erişebilir ve diğer Windows Çalışma Zamanı uygulamaları ve bileşenleriyle birlikte çalışabilirler. C++ dilinde yazılan Evrensel Windows Platformu (UWP) uygulamaları doğrudan CPU'da yürütülen yerel koda derlenir. C# veya Visual Basic ile yazılan UWP uygulamaları Microsoft ara diline (MSIL) derlenir ve ortak dil çalışma zamanında (CLR) yürütülür. JavaScript ile yazılan UWP uygulamaları bir JavaScript çalışma zamanı ortamında yürütülür. Windows Çalışma Zamanı işletim sistemi bileşenleri C++ dilinde yazılır ve yerel kod olarak çalıştırılır. Bu bileşenlerin ve UWP uygulamalarının tümü Windows Çalışma Zamanı uygulama ikili arabirimi (ABI) üzerinden doğrudan iletişim kurar.
Modern bir C++ deyiminde Windows Çalışma Zamanı desteğini etkinleştirmek için Microsoft, C++/CX dil uzantısını oluşturmuştur. C++/CX, temel Windows Çalışma Zamanı türlerinin yerleşik temel türlerini ve uygulamalarını sağlar. Bu türler, C++ uygulamalarının ve bileşenlerinin ABI genelinde diğer dillerde yazılmış uygulamalarla iletişim kurmasına olanak sağlar. C++/CX uygulamaları herhangi bir Windows Çalışma Zamanı türünü kullanabilir. Ayrıca diğer UWP uygulamalarının ve bileşenlerinin kullanabileceği sınıflar, yapılar, arabirimler ve diğer kullanıcı tanımlı türler oluşturabilirler. C++/CX ile yazılmış bir UWP uygulaması, genel erişilebilirliği olmadığı sürece normal C++ sınıflarını ve yapılarını da kullanabilir.
C++/CX dil projeksiyonu ve kapaklar altında nasıl çalıştığı hakkında ayrıntılı bir tartışma için şu blog gönderilerine bakın:
Not
C++/CX hala destekleniyor olsa da, bunun yerine yeni Windows Çalışma Zamanı uygulamaları ve bileşenleri için C++/WinRT kullanmanızı öneririz. Modern Windows API'sine birinci sınıf erişim sağlamak için tasarlanmıştır. Adı rağmen, C++/WinRT uzantısız yalnızca standart C++17 kullanır. Windows Çalışma Zamanı API'leri için C++ dil projeksiyonu uygulamak için yalnızca üst bilgi kitaplığı kullanır. C++/WinRT, Windows SDK'sında 1803 (10.0.17134.0) sürümünden itibaren kullanılabilir.
Windows meta verileri (.winmd) dosyaları
C++ dilinde yazılmış bir UWP uygulamasını derlediğinizde, derleyici yürütülebilir dosyayı yerel makine kodunda oluşturur ve ayrıca sınıflar, yapılar, numaralandırmalar, arabirimler, parametreli arabirimler ve temsilciler içeren genel Windows Çalışma Zamanı türlerinin açıklamalarını içeren ayrı bir Windows meta verileri (.winmd
) dosyası oluşturur. Meta verilerin biçimi.NET Framework derlemelerinde kullanılan biçime benzer. C++ bileşeninde .winmd
dosya yalnızca meta verileri içerir; yürütülebilir kod ayrı bir dosyadadır. Windows'un içerdiği Windows Çalışma Zamanı bileşenleri bu düzenlemeyi kullanır. Dosya .winmd
adı, kaynak koddaki kök ad alanıyla eşleşmeli veya ön ek olmalıdır. (.NET Framework dilleri için, .winmd
dosya aynı bir .NET Framework derlemesi gibi hem kodu hem de meta verileri içerir.)
Dosyadaki .winmd
meta veriler kodunuzun yayımlanmış yüzeyini temsil eder. Yayımlanan türler, diğer uygulamaların hangi dilde yazıldığından bağımsız olarak diğer UWP uygulamaları tarafından görülebilir. Meta veriler veya yayımlanan kodunuz yalnızca Windows Çalışma Zamanı türü sistemi tarafından belirtilen türleri içerebilir. Normal sınıflar, diziler, şablonlar veya C++ Standart Kitaplığı (STL) kapsayıcıları gibi C++'a özgü dil yapılarını yayımlayamazsınız. JavaScript veya C# istemci uygulaması bunlarla ne yapacağını bilemez.
Bir türün veya yöntemin meta verilerde görünür olup olmadığı, hangi erişilebilirlik değiştiricilerinin uygulandığına bağlıdır. Görünür olması için bir türün ad alanında bildirilmesi ve olarak public
bildirilmesi gerekir. public
ref class
Kodunuzda iç yardımcı türü olarak izin verilmeyen bir öğeye izin verilir; yalnızca meta verilerde görünmez. bir public ref class
içinde bile tüm üyeler mutlaka görünür değildir. Aşağıdaki tabloda, bir public ref class
içindeki C++ erişim tanımlayıcıları arasındaki ilişki listelenerek meta veri görünürlüğü Windows Çalışma Zamanı:
Meta verilerde yayımlandı | Meta verilerde yayımlanmaz |
---|---|
public |
private |
protected |
internal |
public protected |
private protected |
Dosyaların içeriğini görüntülemek için Nesne Tarayıcısı'nı .winmd
kullanabilirsiniz. Windows ile birlikte gelen Windows Çalışma Zamanı bileşenleri dosyada Windows.winmd
bulunur. Dosya, default.winmd
C++/CX içinde kullanılan temel türleri ve platform.winmd
ad alanından Platform
türleri içerir. Varsayılan olarak, bu üç .winmd
dosya UWP uygulamaları için her C++ projesine eklenir.
İpucu
Ad alanı Platform::Collections
içindeki türler, ortak olmadıklarından .winmd
dosyada görünmez. Bunlar, içinde Windows::Foundation::Collections
tanımlanan arabirimlerin özel C++'a özgü uygulamalarıdır. JavaScript veya C# dilinde yazılmış bir Windows Çalışma Zamanı uygulaması sınıfın Platform::Collections::Vector
ne olduğunu bilmez, ancak bir Windows::Foundation::Collections::IVector
kullanabilir. Türler Platform::Collections
içinde collection.h
tanımlanır.
C++/CX'te Windows Çalışma Zamanı tür sistemi
Aşağıdaki bölümlerde, Windows Çalışma Zamanı türü sisteminin ana özellikleri ve bunların C++/CX'te nasıl desteklendiği açıklanmaktadır.
Ad alanları
Tüm Windows Çalışma Zamanı türleri bir ad alanı içinde bildirilmelidir; Windows API'sinin kendisi ad alanına göre düzenlenir. Bir .winmd
dosya, kök ad alanının adıyla aynı ada sahip olmalıdır. Örneğin, adlı A.B.C.MyClass
bir sınıfın örneği yalnızca , A.B.winmd
veya A.B.C.winmd
adlı A.winmd
bir meta veri dosyasında tanımlandığında oluşturulabilir. DLL'nin adı dosya adıyla .winmd
eşleşecek şekilde gerekli değildir.
Windows API'sinin kendisi, ad alanlarına göre düzenlenmiş iyi faktörlü bir sınıf kitaplığı olarak yeniden keşfedilmiştir. Tüm Windows Çalışma Zamanı bileşenleri ad alanında Windows.*
bildirilir.
Daha fazla bilgi için bkz . Ad alanları ve tür görünürlüğü.
Temel türler
Windows Çalışma Zamanı aşağıdaki temel türleri tanımlar: , , , , Int32
, , UInt64
Single
Char16
Boolean
Double
UInt32
Int64
ve .String
UInt16
Int16
UInt8
C++/CX, varsayılan ad alanında , , , , , , , int64
, , float64
float32
ve char16
olarak uint16
temel sayısal türleri destekler. int32
int16
uint64
uint32
Boolean
ve String
ad alanında Platform
da tanımlanır.
C++/CX, Windows Çalışma Zamanı desteklenmeyen ve genel API'lerde kullanılamayan ile eşdeğer unsigned char
olan öğesini de tanımlaruint8
.
Temel bir tür, bir Platform::IBox
arabirime sarmalanarak null yapılabilir. Daha fazla bilgi için bkz . Değer sınıfları ve yapıları.
Temel türler hakkında daha fazla bilgi için bkz. Temel türler
Dizeler
Windows Çalışma Zamanı dizesi, 16 bit UNICODE karakterlerden oluşan sabit bir dizidir. Windows Çalışma Zamanı dizesi olarak Platform::String^
yansıtılır. Bu sınıf dize oluşturma, işleme ve 'a ve 'den wchar_t
dönüştürme için yöntemler sağlar.
Daha fazla bilgi için bkz . Dizeler.
Diziler
Windows Çalışma Zamanı herhangi bir türde tek boyutlu dizileri destekler. Dizi dizileri desteklenmez. C++/CX'te Windows Çalışma Zamanı diziler sınıf olarak Platform::Array
yansıtılır.
Daha fazla bilgi için bkz. Array
ve WriteOnlyArray
.
ref class
ve ref struct
türleri
Bir Windows Çalışma Zamanı sınıfı, C++/CX biçiminde veya ref class
ref struct
türü olarak yansıtılır çünkü başvuruyla kopyalanır. ve ref struct
nesneleri için ref class
bellek yönetimi, başvuru sayımı aracılığıyla saydam olarak işlenir. Bir nesneye yapılan son başvuru kapsamın dışına çıktığında nesne yok edilir. Bir ref class
veya ref struct
türü:
Üye oluşturucuları, yöntemleri, özellikleri ve olayları olarak içerir. Bu üyeler ,
private
,protected
veyainternal
erişilebilirliği olabilirpublic
.Özel iç içe
enum
,struct
veyaclass
tanımları içerebilir.Doğrudan bir temel sınıftan devralabilir ve istediğiniz sayıda arabirim uygulayabilir. Tüm
ref class
nesneler örtük olarak sınıfınaPlatform::Object
dönüştürülebilir ve sanal yöntemlerini (örneğin,Object::ToString
) geçersiz kılabilir.
Ortak ref class
oluşturucuya sahip olan bir, daha fazla türetilmesini önlemek için olarak sealed
bildirilmelidir.
Daha fazla bilgi için bkz . Başvuru sınıfları ve yapıları
value class
ve value struct
türleri
veya value class
value struct
temel bir veri yapısını temsil eder ve yalnızca türler, value struct
türler veya tür Platform::String^
olabilecek value class
alanlar içerir. value struct
ve value class
nesneleri değere göre kopyalanır.
bir value struct
, bir IBox
arabirime sarmalanarak null yapılabilir.
Daha fazla bilgi için bkz . Değer sınıfları ve yapıları.
Kısmi sınıflar
Kısmi sınıf özelliği, bir sınıfın birden çok dosya üzerinde tanımlanmasını sağlar. XAML düzenleyicisi gibi kod oluşturma araçlarının, düzenlediğiniz başka bir dosyaya dokunmadan bir dosyayı değiştirmesine olanak tanır.
Daha fazla bilgi için bkz . Kısmi sınıflar
Properties
Özellik, herhangi bir Windows Çalışma Zamanı türünün genel veri üyesidir. Anahtar sözcüğü kullanılarak property
bildirilip tanımlanır. Bir özellik yöntem çifti olarak get
/set
uygulanır. İstemci kodu, bir özelliğe ortak bir alanmış gibi erişir. Özel get
veya set
kod gerektirmeyen bir özellik, önemsiz bir özellik olarak bilinir ve açık get
veya set
yöntemler olmadan bildirilebilir.
Daha fazla bilgi için bkz . Özellikler.
C++/CX'te koleksiyonları Windows Çalışma Zamanı
Windows Çalışma Zamanı, her dilin kendi yöntemiyle uyguladığı koleksiyon türleri için bir arabirim kümesi tanımlar. C++/CX, Platform::Collections::Map
C++ Standart Kitaplığı karşılık gelenleriyle uyumlu olan sınıf, sınıf ve diğer ilgili somut koleksiyon türlerinde uygulamalar Platform::Collections::Vector
sağlar.
Daha fazla bilgi için bkz . Koleksiyonlar.
Şablon ref class
türleri
private
ve internal
erişim ref class
türleri şablonlanabilir ve özelleştirilebilir.
Daha fazla bilgi için bkz . Şablon başvuru sınıfları.
Arabirimler
Windows Çalışma Zamanı arabirimi, bir ref class
veya ref struct
türünün arabirimden devralması durumunda uygulaması gereken ortak özellikler, yöntemler ve olaylar kümesini tanımlar.
Daha fazla bilgi için bkz . Arabirimler.
Numaralandırmalar
enum class
Windows Çalışma Zamanı bir tür, C++ içinde kapsamı belirlenmiş enum
bir türe benzer. [Flags] özniteliği uygulanmadığı sürece, temel alınan tür olur int32
. Bu durumda, temel alınan tür olur uint32
.
Daha fazla bilgi için bkz . Sabit listeleri.
Temsilciler
Windows Çalışma Zamanı bir temsilci, C++ içindeki bir std::function
nesneye benzer. Uyumlu imzalara sahip istemci tarafından sağlanan işlevleri çağırmak için kullanılan özel ref class
bir tür. Temsilciler en yaygın olarak Windows Çalışma Zamanı olay türü olarak kullanılır.
Daha fazla bilgi için bkz . Temsilciler.
Özel durumlar
C++/CX'te özel özel durum türlerini, std::exception
türlerini ve Platform::Exception
türlerini yakalayabilirsiniz.
Daha fazla bilgi için bkz . Özel durumlar.
Ekinlikler
Olay, türü temsilci türü olan veya ref struct
içindeki ref class
ortak bir üyedir. Bir olay yalnızca sahip olan sınıf tarafından çağrılabilir (yani tetiklenebilir). Ancak istemci kodu, sahip olan sınıf olayı tetiklediğinde çağrılan kendi olay işleyici işlevlerini sağlayabilir.
Daha fazla bilgi için bkz . Olaylar.
Atama
C++/CX, standart C++ atama işleçlerini static_cast
, dynamic_cast
ve reinterpret_cast
ve ayrıca safe_cast
C++/CX'e özgü işleci destekler.
Daha fazla bilgi için bkz . Atama.
Kutulama
Kutulanmış değişken, başvuru türünde sarmalanmış bir değer türüdür. Başvuru semantiğinin gerekli olduğu durumlarda kutulanmış değişkenleri kullanın.
Daha fazla bilgi için bkz . Boxing.
Özellikler
Öznitelik, herhangi bir Windows Çalışma Zamanı türüne veya türüne uygulanabilen bir meta veri değeridir. Öznitelikler çalışma zamanında incelenebilir. Windows Çalışma Zamanı, ad alanında Windows::Foundation::Metadata
bir dizi ortak öznitelik tanımlar. Ortak arabirimlerdeki kullanıcı tanımlı öznitelikler bu sürümdeki Windows Çalışma Zamanı tarafından desteklenmez.
API'nin kullanımdan kaldırılması
Windows Çalışma Zamanı sistem türleri tarafından kullanılan özniteliği kullanarak genel API'leri kullanım dışı olarak işaretleyebilirsiniz.
Daha fazla bilgi için bkz . Türleri ve üyeleri kullanımdan kaldırma.