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.

ifade
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.

ifade
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 Tool).

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ı