Bagikan melalui


safe_cast (C++/CLI dan C++/CX)

Operasi safe_cast mengembalikan ekspresi yang ditentukan sebagai jenis yang ditentukan, jika berhasil; jika tidak, akan melemparkan InvalidCastException.

Semua Runtime

(Tidak ada keterangan untuk fitur bahasa ini yang berlaku untuk semua runtime.)

Sintaks

[default]:: safe_cast< type-id >( expression )

Windows Runtime

safe_cast memungkinkan Anda mengubah jenis ekspresi tertentu. Dalam situasi di mana Anda sepenuhnya mengharapkan variabel atau parameter dapat dikonversi ke jenis tertentu, Anda dapat menggunakan safe_cast tanpa blok try-catch untuk mendeteksi kesalahan pemrograman selama pengembangan. Untuk informasi selengkapnya, lihat Casting (C++/CX).

Sintaks

[default]:: safe_cast< type-id >( expression )

Parameter

type-id
Jenis untuk mengonversi ekspresi ke. Handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke referensi atau jenis nilai.

expression
Ekspresi yang mengevaluasi ke handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke jenis referensi atau nilai.

Keterangan

safe_cast melemparkan InvalidCastException jika tidak dapat mengonversi ekspresi ke jenis yang ditentukan oleh type-id. Untuk menangkap InvalidCastException, tentukan opsi pengkompilasi /EH (Model Penanganan Pengecualian), dan gunakan pernyataan coba/tangkap.

Persyaratan

Opsi pengkompilasi: /ZW

Contoh

Contoh kode berikut menunjukkan cara menggunakan safe_cast dengan Windows Runtime.

// safe_cast_ZW.cpp
// compile with: /ZW /EHsc

using namespace default;
using namespace Platform;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main(Array<String^>^ args) {
   I1^ i1 = ref new X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // Fails because i1 is not derived from I3.
   }
   catch(InvalidCastException^ ic) {
   wprintf(L"Caught expected exception: %s\n", ic->Message);
   }
}
Caught expected exception: InvalidCastException

Runtime Bahasa Umum

safe_cast memungkinkan Anda mengubah jenis ekspresi dan menghasilkan kode MSIL yang dapat diverifikasi.

Sintaks

[cli]:: safe_cast< type-id >( expression )

Parameter

type-id
Handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke referensi atau jenis nilai.

expression
Ekspresi yang mengevaluasi ke handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke jenis referensi atau nilai.

Keterangan

Ekspresi) type-id>(ekspresi safe_cast<mengonversi ekspresi operand menjadi objek tipe-id.

Pengkompilasi akan menerima static_cast di sebagian besar tempat yang akan menerima safe_cast. Namun, safe_cast dijamin untuk menghasilkan MSIL yang dapat diverifikasi, sedangkan dapat menghasilkan MSIL yang static_cast tidak dapat diverifikasi. Lihat Kode Murni dan Dapat Diverifikasi (C++/CLI) dan Peverify.exe (PEVerify Tool) untuk informasi selengkapnya tentang kode yang dapat diverifikasi.

Seperti static_cast, safe_cast memanggil konversi yang ditentukan pengguna.

Untuk informasi selengkapnya tentang cast, lihat Operator Casting.

safe_cast tidak menerapkan const_cast (dibuang const).

safe_cast berada di namespace cli. Lihat Namespace Platform, default, dan cli untuk informasi selengkapnya.

Untuk informasi selengkapnya tentang safe_cast, lihat:

Persyaratan

Opsi pengkompilasi: /clr

Contoh

Salah satu contoh di mana pengkompilasi tidak akan menerima static_cast tetapi akan menerima safe_cast adalah untuk cast antara jenis antarmuka yang tidak terkait. Dengan safe_cast, pengkompilasi tidak akan mengeluarkan kesalahan konversi dan akan melakukan pemeriksaan pada runtime untuk melihat apakah pemeran dimungkinkan

// safe_cast.cpp
// compile with: /clr
using namespace System;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main() {
   I1^ i1 = gcnew X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // fail at runtime, no common type
   }
   catch(InvalidCastException^) {
      Console::WriteLine("Caught expected exception");
   }
}
Caught expected exception

Baca juga

Ekstensi Komponen untuk .NET dan UWP