Ekstensi Komponen untuk .NET dan UWP

Standar C++ memungkinkan vendor pengkompilasi untuk menyediakan ekstensi non-standar ke bahasa tersebut. Microsoft menyediakan ekstensi untuk membantu Anda menyambungkan kode C++ asli ke kode yang berjalan pada .NET Framework atau Platform Windows Universal (UWP). Ekstensi .NET disebut C++/CLI dan menghasilkan kode yang dijalankan di lingkungan eksekusi terkelola .NET yang disebut Common Language Runtime (CLR). Ekstensi UWP disebut C++/CX dan menghasilkan kode mesin asli.

Catatan

Untuk aplikasi baru, sebaiknya gunakan C++/WinRT daripada C++/CX. C++/WinRT adalah proyeksi bahasa C++17 standar baru untuk WINDOWS Runtime API. Kami akan terus mendukung C++/CX dan WRL, tetapi sangat menyarankan agar aplikasi baru menggunakan C++/WinRT. Untuk informasi selengkapnya, lihat C++/WinRT.

Dua runtime, satu set ekstensi

C++/CLI memperluas standar ISO/ANSI C++, dan didefinisikan di bawah Ecma C++/CLI Standard. Untuk informasi selengkapnya, lihat Pemrograman .NET dengan C++/CLI (Visual C++).

Ekstensi C++/CX adalah subset C++/CLI. Meskipun sintaks ekstensi identik dalam kebanyakan kasus, kode yang dihasilkan tergantung pada apakah Anda menentukan /ZW opsi pengkompilasi untuk menargetkan UWP, atau /clr opsi untuk menargetkan .NET. Sakelar ini diatur secara otomatis saat Anda menggunakan Visual Studio untuk membuat proyek.

Kata Kunci Tipe Data

Ekstensi bahasa mencakup kata kunci agregat, yang terdiri dari dua token yang dipisahkan oleh spasi kosong. Token mungkin memiliki satu arti ketika digunakan secara terpisah, dan arti lain ketika digunakan bersama-sama. Misalnya, kata "ref" adalah pengidentifikasi biasa, dan kata "kelas" adalah kata kunci yang mendeklarasikan kelas asli. Tetapi ketika kata-kata ini digabungkan untuk membentuk kelas ref, kata kunci agregat yang dihasilkan mendeklarasikan entitas yang dikenal sebagai kelas runtime.

Ekstensi juga menyertakan kata kunci yang sensitif terhadap konteks. Kata kunci diperlakukan sebagai peka konteks tergantung pada jenis pernyataan yang berisinya, dan penempatannya dalam pernyataan tersebut. Misalnya, token "properti" dapat menjadi pengidentifikasi, atau dapat mendeklarasikan jenis khusus anggota kelas publik.

Tabel berikut ini mencantumkan kata kunci dalam ekstensi bahasa C++.

Kata kunci Peka konteks Kegunaan Referensi
kelas ref

struktur ref
Tidak Mendeklarasikan kelas. Kelas dan Struktur
kelas nilai

struktur nilai
Tidak Mendeklarasikan kelas nilai. Kelas dan Struktur
kelas antarmuka

struktur antarmuka
Tidak Mendeklarasikan antarmuka. kelas antarmuka
kelas enum

struct enum
Tidak Menyatakan enumerasi. kelas enum
property Ya Mendeklarasikan properti. property
delegasi Ya Menyatakan delegasi. delegasi (C++/CLI dan C++/CX)
event Ya Mendeklarasikan peristiwa. event

Mengesampingkan Penentu

Anda dapat menggunakan kata kunci berikut untuk memenuhi syarat mengambil alih perilaku untuk derivasi. new Meskipun kata kunci bukan ekstensi C++, kata kunci tersebut tercantum di sini karena dapat digunakan dalam konteks tambahan. Beberapa penentu juga valid untuk pemrograman asli. Untuk informasi selengkapnya, lihat Cara: Mendeklarasikan Penentu Penggantian dalam Kompilasi Asli (C++/CLI).

Kata kunci Konteks Sensitif Kegunaan Referensi
abstrak Ya Menunjukkan bahwa fungsi atau kelas abstrak. abstrak
new Tidak Menunjukkan bahwa fungsi bukan penimpaan versi kelas dasar. baru (slot baru dalam vtable)
Menimpa Ya Menunjukkan bahwa metode harus merupakan penimpaan versi kelas dasar. Menimpa
disegel Ya Mencegah kelas digunakan sebagai kelas dasar. disegel

Kata kunci untuk Generik

Kata kunci berikut telah ditambahkan untuk mendukung jenis generik. Untuk informasi selengkapnya, lihat Generik.

Kata kunci Peka konteks Kegunaan
Generik Tidak Mendeklarasikan jenis generik.
di mana Ya Menentukan batasan yang diterapkan ke parameter jenis generik.

Kata Kunci Lain-lain

Kata kunci berikut telah ditambahkan ke ekstensi C++.

Kata kunci Peka konteks Kegunaan Referensi
akhirnya Ya Menunjukkan perilaku penanganan pengecualian default. Penanganan Pengecualian
untuk masing-masing, dalam Tidak Menghitung elemen koleksi. untuk masing-masing, dalam
gcnew Tidak Mengalokasikan jenis pada tumpukan yang dikumpulkan sampah. Gunakan alih-alih new dan delete. ref baru, gcnew
ref baru Ya Mengalokasikan jenis Windows Runtime. Gunakan alih-alih new dan delete. ref baru, gcnew
initonly Ya Menunjukkan bahwa anggota hanya dapat diinisialisasi saat deklarasi atau dalam konstruktor statis. initonly (C++/CLI)
harfiah Ya Membuat variabel harfiah. harfiah
nullptr Tidak Menunjukkan bahwa handel atau penunjuk tidak mengarah ke objek. nullptr

Konstruksi Templat

Konstruksi bahasa berikut diimplementasikan sebagai templat, bukan sebagai kata kunci. Jika Anda menentukan /ZW opsi pengkompilasi, opsi tersebut lang ditentukan di namespace layanan. Jika Anda menentukan /clr opsi pengkompilasi, opsi tersebut cli ditentukan di namespace layanan.

Kata kunci Kegunaan Referensi
array Mendeklarasikan array. Array
interior_ptr (Hanya CLR) Menunjuk ke data dalam jenis referensi. interior_ptr (C++/CLI)
pin_ptr (Hanya CLR) Menunjuk ke jenis referensi CLR untuk menekan sementara sistem pengumpulan sampah. pin_ptr (C++/CLI)
safe_cast Menentukan dan menjalankan metode transmisi optimal untuk jenis runtime. safe_cast
typeid (Hanya CLR) System.Type Mengambil objek yang menjelaskan jenis atau objek yang diberikan. typeid

Deklarator

Deklarator jenis berikut menginstruksikan runtime untuk secara otomatis mengelola masa pakai dan penghapusan objek yang dialokasikan.

Operator Kegunaan Referensi
^ Mendeklarasikan handel ke objek; artinya, pointer ke Windows Runtime atau objek CLR yang secara otomatis dihapus ketika tidak lagi dapat digunakan. Menangani ke Operator Objek (^)
% Mendeklarasikan referensi pelacakan; artinya, referensi ke objek Windows Runtime atau CLR yang secara otomatis dihapus ketika tidak lagi dapat digunakan. Operator Referensi Pelacakan

Bagian ini mencantumkan konstruksi pemrograman tambahan, dan topik yang berkaitan dengan CLR.

Topik Deskripsi
__identifier (C++/CLI) (Windows Runtime dan CLR) Mengaktifkan penggunaan kata kunci sebagai pengidentifikasi.
Daftar Argumen Variabel (...) (C++/CLI) (Windows Runtime dan CLR) Memungkinkan fungsi untuk mengambil jumlah variabel argumen.
.NET Framework Setara dengan C++ Jenis Asli (C++/CLI) Mencantumkan jenis CLR yang digunakan sebagai pengganti jenis integral C++.
pengubah appdomain__declspec __declspec pengubah yang mengamanatkan bahwa variabel statis dan global ada per appdomain.
C-Style Casts dengan /clr (C++/CLI) Menjelaskan bagaimana cast gaya C ditafsirkan.
konvensi panggilan __clrcall Menunjukkan konvensi panggilan yang sesuai dengan CLR.
__cplusplus_cli Makro yang telah ditentukan sebelumnya
Atribut Kustom Menjelaskan cara menentukan atribut CLR Anda sendiri.
Penanganan Pengecualian Memberikan gambaran umum penanganan pengecualian.
Penimpaan Eksplisit Menunjukkan bagaimana fungsi anggota dapat mengambil alih anggota arbitrer.
Rakitan Teman (C++) Membahas bagaimana rakitan klien dapat mengakses semua jenis dalam komponen rakitan.
Tinju Menunjukkan kondisi di mana jenis nilai dikotak.
Dukungan Pengkompilasi untuk Jenis Sifat Membahas cara mendeteksi karakteristik jenis pada waktu kompilasi.
pragmas terkelola dan tidak terkelola Menunjukkan bagaimana fungsi terkelola dan tidak terkelola dapat berdampingan dalam modul yang sama.
pengubah proses__declspec __declspec pengubah yang mengamanatkan bahwa variabel statis dan global ada per proses.
Pantulan (C++/CLI) Menunjukkan versi CLR dari informasi jenis run-time.
String Membahas konversi kompilator literal string ke String.
Penerusan Tipe (C++/CLI) Memungkinkan pergerakan jenis dalam rakitan pengiriman ke rakitan lain sehingga kode klien tidak harus dikompilasi ulang.
Atribut yang Ditentukan Pengguna Menunjukkan atribut yang ditentukan pengguna.
Direktif #using Mengimpor rakitan eksternal.
Dokumentasi XML Menjelaskan dokumentasi kode berbasis XML dengan menggunakan /doc (Komentar Dokumentasi Proses) (C/C++)

Baca juga

Pemrograman .NET dengan C++/CLI (Visual C++)
Interoperabilitas Native dan .NET