Aracılığıyla paylaş


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

safe_cast işlemi belirtilen ifadeyi belirtilen tür olarak döndürür; başarılı olursa, aksi takdirde oluştururInvalidCastException.

Tüm Çalışma Zamanları

(Bu dil özelliği için tüm çalışma zamanları için geçerli olan hiçbir açıklama yoktur.)

Sözdizimi

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

Windows Çalışma Zamanı

safe_cast, belirtilen ifadenin türünü değiştirmenize olanak tanır. Bir değişkenin veya parametrenin belirli bir türe dönüştürülebilir olmasını tam olarak beklediğiniz durumlarda, geliştirme sırasında programlama hatalarını algılamak için deneme yakalama bloğu olmadan safe_cast kullanabilirsiniz. Daha fazla bilgi için bkz . Atama (C++/CX).

Sözdizimi

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

Parametreler

type-id
İfadenin dönüştürülecek türü. Başvuru veya değer türünün tanıtıcısı, değer türü veya başvuruya veya değer türüne izleme başvurusu.

Ifa -de
Bir başvuruya veya değer türüne, değer türüne veya başvuruya veya değer türüne yönelik izleme başvurusuna yönelik tanıtıcıyı değerlendiren ifade.

Açıklamalar

safe_cast, ifadeyi type-id ile belirtilen türe dönüştüremiyorsa oluştururInvalidCastException. öğesini yakalamak InvalidCastExceptioniçin /EH (Özel Durum İşleme Modeli) derleyici seçeneğini belirtin ve try/catch deyimini kullanın.

Gereksinimler

Derleyici seçeneği: /ZW

Örnekler

Aşağıdaki kod örneği, Windows Çalışma Zamanı ile safe_cast nasıl kullanılacağını gösterir.

// 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

Ortak Dil Çalışma Zamanı

safe_cast bir ifadenin türünü değiştirmenize ve doğrulanabilir MSIL kodu oluşturmanıza olanak tanır.

Sözdizimi

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

Parametreler

type-id
Başvuru veya değer türünün tanıtıcısı, değer türü veya başvuruya veya değer türüne izleme başvurusu.

Ifa -de
Bir başvuruya veya değer türüne, değer türüne veya başvuruya veya değer türüne yönelik izleme başvurusuna yönelik tanıtıcıyı değerlendiren ifade.

Açıklamalar

type-id>(ifadesisafe_cast<), işlenen ifadeyi type-id türünde bir nesneye dönüştürür.

Derleyici, safe_cast kabul edeceği çoğu yerde bir static_cast kabul eder. Ancak, safe_cast doğrulanabilir MSIL üretmesi garanti edilirken, doğrulanamayan static_cast MSIL üretebilir. Doğrulanabilir kod hakkında daha fazla bilgi için bkz. Saf ve Doğrulanabilir Kod (C++/CLI) ve Peverify.exe (PEVerify Aracı).

gibi static_cast, safe_cast kullanıcı tanımlı dönüştürmeleri çağırır.

Atamalar hakkında daha fazla bilgi için bkz . Atama İşleçleri.

safe_cast bir const_cast uygulamaz (atılmazconst).

safe_cast cli ad alanındadır. Daha fazla bilgi için bkz . Platform, varsayılan ve cli Ad Alanları .

safe_cast hakkında daha fazla bilgi için bkz:

Gereksinimler

Derleyici seçeneği: /clr

Örnekler

Derleyicinin safe_cast static_cast kabul etmediği ancak kabul edeceği bir örnek, ilişkisiz arabirim türleri arasındaki atamalara yöneliktir. safe_cast ile derleyici dönüştürme hatası vermez ve atamanın mümkün olup olmadığını görmek için çalışma zamanında bir denetim gerçekleştirir

// 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

Ayrıca bkz.

.NET ve UWP İçin Bileşen Uzantıları