Aracılığıyla paylaş


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 publicbildirilmesi 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 classiçinde bile tüm üyeler mutlaka görünür değildir. Aşağıdaki tabloda, bir public ref classiç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::Collectionstanı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::IVectorkullanabilir. Türler Platform::Collections içinde collection.htanı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.winmdveya A.B.C.winmdadlı A.winmdbir 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, , UInt64SingleChar16BooleanDoubleUInt32Int64ve .StringUInt16Int16UInt8 C++/CX, varsayılan ad alanında , , , , , , , int64, , float64float32ve char16olarak uint16temel sayısal türleri destekler. int32int16uint64uint32 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 charolan öğ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_tdö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, protectedveya internal erişilebilirliği olabilirpublic.

  • Özel iç içe enum, structveya class 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ına Platform::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 sealedbildirilmelidir.

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_castve reinterpret_castve 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.

Ayrıca bkz.

C++/CX dil başvurusu