__try_cast
Not bu konuda yalnızca yönetilen uzantılar 1 için C++ sürümüdür. Bu sözdizimi, yalnızca sürüm 1 kodunu korumak için kullanılmalıdır. Bkz: safe_cast yeni sözdizimine eşdeğer işlev kullanma hakkında bilgi için.
Cast başarısız olursa bir istisna atar veya belirtilen atama yapar.
__try_cast < type-id > ( expression )
__try_cast Anahtar sözcük (benzer davranış için dynamic_cast) otomatik olarak bir özel durum üretiliyor için destek sağlar (tür System::InvalidCastException) olduğunda belirtilen çevrim işlemi başarısız olur.
__try_cast Anahtar sözcüğünü olası çevrim hataları uyarmak otomatik olarak uygulama, sınama aşaması sırasında kullanılabilir.
C++ için yönetilen uzantılar porting, yerini __try_cast birlikte çağıran safe_cast.
__try_castdeğer türleri için işaretçiyi yayınları çalışmaz (__value), zamanında türlerini denetlemek mümkün olmadığından.
Aşağıdaki örnekte, bir işaretçi artığını denemesi (, Derived türü) başka bir fare işaretçisini (, MoreDerived türü) yapılır. Cast başarısız olursa, yakalandı ve catch bloğu tarafından bildirdi:
// keyword__try_cast.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;
__gc struct Base {};
__gc struct Derived : Base {};
__gc struct MoreDerived : Derived {};
int main() {
Base*bp = new Derived;
try {
MoreDerived* mdp = __try_cast<MoreDerived*>(bp);
}
catch(System::InvalidCastException*) {
Console::WriteLine("Could not cast 'bp' to MoreDerived*");
}
}
Could not cast 'bp' to MoreDerived*