Gambaran umum sistem jenis (C++/CX)
Dengan menggunakan arsitektur Windows Runtime, Anda dapat menggunakan C++/WinRT, C++/CX, Visual Basic, Visual C#, dan JavaScript untuk menulis aplikasi dan komponen. Mereka dapat langsung mengakses Windows API dan beroperasi dengan aplikasi dan komponen Windows Runtime lainnya. aplikasi Platform Windows Universal (UWP) yang ditulis dalam C++ dikompilasi ke kode asli yang dijalankan langsung di CPU. Aplikasi UWP yang ditulis dalam C# atau Visual Basic dikompilasi ke bahasa perantara Microsoft (MSIL) dan dijalankan dalam runtime bahasa umum (CLR). Aplikasi UWP yang ditulis dalam JavaScript dijalankan di lingkungan run-time JavaScript. Komponen sistem operasi Windows Runtime sendiri ditulis dalam C++ dan dijalankan sebagai kode asli. Semua komponen dan aplikasi UWP ini berkomunikasi langsung melalui antarmuka biner aplikasi Windows Runtime (ABI).
Untuk mengaktifkan dukungan untuk Windows Runtime di idiom C++ modern, Microsoft membuat ekstensi bahasa C++/CX. C++/CX menyediakan jenis dasar bawaan dan implementasi jenis Windows Runtime dasar. Jenis ini memungkinkan aplikasi dan komponen C++ berkomunikasi di seluruh ABI dengan aplikasi yang ditulis dalam bahasa lain. Aplikasi C++/CX dapat menggunakan jenis Windows Runtime apa pun. Mereka juga dapat membuat kelas, struktur, antarmuka, dan jenis lain yang ditentukan pengguna yang dapat digunakan aplikasi dan komponen UWP lainnya. Aplikasi UWP yang ditulis dalam C++/CX juga dapat menggunakan kelas dan struktur C++ reguler, selama mereka tidak memiliki aksesibilitas publik.
Untuk diskusi mendalam tentang proyeksi bahasa C++/CX dan cara kerjanya di bawah sampul, lihat posting blog ini:
Catatan
Meskipun C++/CX masih didukung, kami sarankan Anda menggunakan C++/WinRT untuk aplikasi dan komponen Windows Runtime baru sebagai gantinya. Ini dirancang untuk memberi Anda akses kelas satu ke Windows API modern. Terlepas dari namanya, C++/WinRT hanya menggunakan C++17 standar tanpa ekstensi. Ini menggunakan pustaka khusus header untuk mengimplementasikan proyeksi bahasa C++ untuk API Runtime Windows. C++/WinRT tersedia di Windows SDK dari versi 1803 (10.0.17134.0) dan seterusnya.
File metadata Windows (.winmd)
Saat Anda mengkompilasi aplikasi UWP yang ditulis dalam C++, pengkompilasi menghasilkan yang dapat dieksekusi dalam kode mesin asli, dan juga menghasilkan file metadata Windows (.winmd
) terpisah yang berisi deskripsi jenis Windows Runtime publik, yang mencakup kelas, struktur, enumerasi, antarmuka, antarmuka parameter, dan delegasi. Format metadata menyerupai format yang digunakan dalam rakitan .NET Framework. Dalam komponen C++, .winmd
file hanya berisi metadata; kode yang dapat dieksekusi berada dalam file terpisah. Komponen Windows Runtime yang disertakan dengan Windows menggunakan pengaturan ini. .winmd
Nama file harus cocok atau merupakan awalan namespace layanan akar dalam kode sumber. (Untuk bahasa .NET Framework, .winmd
file berisi kode dan metadata, sama seperti rakitan .NET Framework.)
Metadata dalam .winmd
file mewakili permukaan kode Anda yang diterbitkan. Jenis yang dipublikasikan dapat dilihat oleh aplikasi UWP lainnya terlepas dari bahasa apa yang ditulis aplikasi lain tersebut. Metadata, atau kode yang Anda terbitkan, hanya dapat berisi jenis yang ditentukan oleh sistem jenis Windows Runtime. Anda tidak dapat menerbitkan konstruksi bahasa khusus C++seperti kelas reguler, array, templat, atau kontainer Pustaka Standar (STL) C++. Aplikasi klien JavaScript atau C# tidak akan tahu apa yang harus dilakukan dengan mereka.
Apakah jenis atau metode terlihat dalam metadata tergantung pada pengubah aksesibilitas apa yang diterapkan padanya. Agar terlihat, jenis harus dideklarasikan dalam namespace dan harus dinyatakan sebagai public
. Non-diizinkanpublic
ref class
sebagai jenis pembantu internal dalam kode Anda; itu hanya tidak terlihat dalam metadata. Bahkan dalam public ref class
, tidak semua anggota selalu terlihat. Tabel berikut mencantumkan hubungan antara penentu akses C++ dalam public ref class
visibilitas metadata Windows Runtime , dan :
Diterbitkan dalam metadata | Tidak diterbitkan dalam metadata |
---|---|
public |
private |
protected |
internal |
public protected |
private protected |
Anda dapat menggunakan Browser Objek untuk melihat konten .winmd
file. Komponen Windows Runtime yang disertakan dengan Windows ditemukan dalam Windows.winmd
file. File default.winmd
berisi jenis dasar yang digunakan dalam C++/CX, dan platform.winmd
berisi jenis dari Platform
namespace. Secara default, ketiga .winmd
file ini disertakan dalam setiap proyek C++ untuk aplikasi UWP.
Tip
Jenis di Platform::Collections
namespace tidak muncul dalam .winmd
file karena tidak publik. Mereka adalah implementasi khusus C++privat dari antarmuka yang didefinisikan dalam Windows::Foundation::Collections
. Aplikasi Windows Runtime yang ditulis dalam JavaScript atau C# tidak tahu apa Platform::Collections::Vector
itu kelas , tetapi dapat menggunakan Windows::Foundation::Collections::IVector
. Jenis didefinisikan Platform::Collections
dalam collection.h
.
Sistem jenis Windows Runtime di C++/CX
Bagian berikut menjelaskan fitur utama sistem jenis Windows Runtime dan bagaimana mereka didukung di C++/CX.
Namaspace
Semua tipe Windows Runtime harus dideklarasikan dalam namespace; WINDOWS API itu sendiri diatur menurut namespace layanan. File .winmd
harus memiliki nama yang sama dengan namespace layanan akar. Misalnya, kelas yang diberi nama A.B.C.MyClass
hanya dapat dibuat jika ditentukan dalam file metadata yang bernama A.winmd
, , A.B.winmd
atau A.B.C.winmd
. Nama DLL tidak diperlukan untuk mencocokkan .winmd
nama file.
WINDOWS API sendiri telah ditemukan kembali sebagai pustaka kelas yang diperhitungkan dengan baik yang diatur oleh namespace. Semua komponen Windows Runtime dideklarasikan dalam Windows.*
namespace.
Untuk informasi selengkapnya, lihat Namespace layanan dan mengetik visibilitas.
Jenis-jenis dasar
Windows Runtime menentukan jenis dasar berikut: UInt8
, , Int16
, UInt16
, Int32
, UInt32
Int64
, UInt64
, Single
, , Double
, Char16
, , Boolean
dan String
. C++/CX mendukung jenis numerik mendasar di namespace defaultnya sebagai uint16
, , , uint64
uint32
, int32
int16
, int64
, float32
, , float64
, dan char16
. Boolean
dan String
juga didefinisikan dalam Platform
namespace layanan.
C++/CX juga mendefinisikan uint8
, setara dengan unsigned char
, yang tidak didukung di Windows Runtime dan tidak dapat digunakan di API publik.
Jenis dasar dapat dibuat nullable dengan membungkusnya dalam Platform::IBox
antarmuka. Untuk informasi selengkapnya, lihat Kelas dan struktur nilai.
Untuk informasi selengkapnya tentang jenis dasar, lihat Jenis dasar
String
String Runtime Windows adalah urutan karakter UNICODE 16-bit yang tidak dapat diubah. String Runtime Windows diproyeksikan sebagai Platform::String^
. Kelas ini menyediakan metode untuk konstruksi string, manipulasi, dan konversi ke dan dari wchar_t
.
Untuk informasi selengkapnya, lihat String.
Larik
Windows Runtime mendukung array satu dimensi dari jenis apa pun. Array array tidak didukung. Di C++/CX, array Windows Runtime diproyeksikan sebagai Platform::Array
kelas .
Untuk informasi lebih lanjut, lihat Array
dan WriteOnlyArray
.
ref class
dan ref struct
jenis
Kelas Windows Runtime diproyeksikan dalam C++/CX sebagai ref class
atau ref struct
jenis, karena disalin oleh referensi. Manajemen memori untuk ref class
objek dan ref struct
ditangani secara transparan melalui penghitungan referensi. Ketika referensi terakhir ke objek keluar dari cakupan, objek dihancurkan. Atau ref class
ref struct
jenis dapat:
Berisi sebagai konstruktor anggota, metode, properti, dan peristiwa. Anggota ini dapat memiliki
public
aksesibilitas ,private
,protected
, atauinternal
.Dapat berisi definisi , ,
struct
atauclass
berlapisenum
privat.Dapat langsung mewarisi dari satu kelas dasar dan dapat mengimplementasikan sejumlah antarmuka. Semua
ref class
objek secara implisit dapat dikonversi kePlatform::Object
kelas dan dapat mengambil alih metode virtualnya—misalnya,Object::ToString
.
Konstruktor ref class
publik harus dinyatakan sebagai sealed
, untuk mencegah derivasi lebih lanjut.
Untuk informasi selengkapnya, lihat Kelas dan struktur Ref
value class
dan value struct
jenis
value class
Atau value struct
mewakili struktur data dasar dan hanya berisi bidang, yang mungkin jenisvalue class
, value struct
jenis, atau jenis Platform::String^
. value struct
dan value class
objek disalin oleh nilai.
Dapat value struct
dibuat nullable dengan membungkusnya dalam IBox
antarmuka.
Untuk informasi selengkapnya, lihat Kelas dan struktur nilai.
Kelas parsial
Fitur kelas parsial memungkinkan satu kelas ditentukan melalui beberapa file. Ini memungkinkan alat pembuatan kode seperti editor XAML memodifikasi satu file tanpa menyentuh file lain yang Anda edit.
Untuk informasi selengkapnya, lihat Kelas parsial
Properti
Properti adalah anggota data publik dari jenis Windows Runtime apa pun. Ini dideklarasikan dan didefinisikan dengan menggunakan property
kata kunci. Properti diimplementasikan sebagai get
/set
pasangan metode. Kode klien mengakses properti seolah-olah itu adalah bidang publik. Properti yang tidak memerlukan kustom get
atau set
kode dikenal sebagai properti sepele dan dapat dinyatakan tanpa metode atau set
eksplisitget
.
Untuk informasi selengkapnya, lihat Properti.
Koleksi Windows Runtime di C++/CX
Windows Runtime mendefinisikan sekumpulan antarmuka untuk jenis koleksi yang diterapkan setiap bahasa dengan caranya sendiri. C++/CX menyediakan implementasi di Platform::Collections::Vector
kelas, Platform::Collections::Map
kelas, dan jenis koleksi beton terkait lainnya, yang kompatibel dengan mitra Pustaka Standar C++mereka.
Untuk informasi selengkapnya, lihat Koleksi.
Jenis templat ref class
private
dan internal
jenis akses ref class
dapat di-template dan dikhususkan.
Untuk informasi selengkapnya, lihat Kelas ref templat.
Antarmuka
Antarmuka Windows Runtime mendefinisikan sekumpulan properti publik, metode, dan peristiwa yang harus diterapkan atau ref class
ref struct
jenis jika mewarisi dari antarmuka.
Untuk informasi lebih lanjut, lihat Antarmuka .
Enums
Jenis enum class
dalam Windows Runtime menyerupan cakupan enum
di C++. Jenis yang mendasar adalah int32
, kecuali atribut [Bendera] diterapkan—dalam hal ini, jenis yang mendasar adalah uint32
.
Untuk informasi selengkapnya, lihat Enums.
Delegasikan
Delegasi dalam Windows Runtime dianalogikan dengan std::function
objek di C++. Ini adalah jenis khusus ref class
yang digunakan untuk memanggil fungsi yang disediakan klien yang memiliki tanda tangan yang kompatibel. Delegasi paling umum digunakan dalam Windows Runtime sebagai jenis peristiwa.
Untuk informasi selengkapnya, lihat Delegasi.
Pengecualian
Di C++/CX, Anda dapat menangkap jenis, jenis, std::exception
dan Platform::Exception
jenis pengecualian kustom.
Untuk informasi selengkapnya, lihat Pengecualian.
Acara
Peristiwa adalah anggota publik dalam atau ref class
ref struct
yang jenisnya adalah jenis delegasi. Peristiwa hanya dapat dipanggil—yaitu, diaktifkan—oleh kelas pemilik. Namun, kode klien dapat menyediakan fungsi penanganan aktivitasnya sendiri, yang dipanggil ketika kelas pemilik mengaktifkan peristiwa.
Untuk informasi selengkapnya, lihat Peristiwa.
Casting
C++/CX mendukung operator static_cast
cast C++ standar, , dynamic_cast
dan reinterpret_cast
, dan juga safe_cast
operator yang khusus untuk C++/CX.
Untuk informasi selengkapnya, lihat Casting.
Boxing
Variabel berkotak adalah jenis nilai yang dibungkus dalam jenis referensi. Gunakan variabel kotak dalam situasi di mana semantik referensi diperlukan.
Untuk informasi selengkapnya, lihat Tinju.
Atribut
Atribut adalah nilai metadata yang dapat diterapkan ke jenis Windows Runtime atau anggota jenis apa pun. Atribut dapat diperiksa pada waktu proses. Windows Runtime mendefinisikan sekumpulan atribut umum di Windows::Foundation::Metadata
namespace. Atribut yang ditentukan pengguna pada antarmuka publik tidak didukung oleh Windows Runtime dalam rilis ini.
Penghentian API
Anda dapat menandai API publik sebagai tidak digunakan lagi dengan menggunakan atribut yang sama yang digunakan oleh jenis sistem Windows Runtime.
Untuk informasi selengkapnya, lihat Jenis dan anggota yang tidak digunakan lagi.