2011-07-21 28 views
7

Daha önce ben (yani patlatmak olmaz) C# as güvenli kullanarak sordu: Is using "as" in C# a safe way of casting?C++/CLI'de güvenli döküm - C# ile "eşdeğeri" eşdeğeri?

cevabı sevdim ve onunla kapalı dayalı bir şey kullanarak sona erdi:

Foo x = y as Foo; 
if (x != null) 
{ 
    ... 
} 

Ama şimdi C# kodumu C++/CLI'ye dönüştürüyorum (bir bağımlılık meselesi nedeniyle ..) bu yüzden sorular ..

C++/CLI eşdeğerini "as" olarak arıyorum, bu güvenli ve patlamaz Doğru türde değilse, çalışma zamanında. Herkes ihtiyaçlarınızı karşılayan bir oyuncu önerebilir mi? (eğer varsa bir örnek verin)

Teşekkürler!

+0

coud? http://stackoverflow.com/questions/712845/c-cli-question-is-there-an-equivalent-to-the-c-is-keyword-or-do-i-have-to-u – crisbia

+0

Reflektör sadece "burada" derdi ... ama sonra, C++/CLI'yi bilmiyorum; p –

+0

@Marc: Silinen cevabınızdan, C++/CLI değil, MC++ modunu kullandığınızı düşünüyorum. Tabii ki, Reflector'un C++/CLI için ayrıştırıcısı, daha fazla pazarlanan dilleri her zaman takip etti. –

cevap

12

Böyle bir şeyi yapmanın C++ yolu dynamic_cast. Yönetilen referanslar gibi yönetilen referanslar için aynı olup olmadığını bilmiyorum, MSDN üzerinde çok az bilgi vardı. C++ derleme sırasında RTTI etkin olarak adlandırılan bir şeye ihtiyacınız vardır.

+3

http://msdn.microsoft.com/en-us/library/85af44e9.aspx –

+0

Dolayısıyla, dynamic_cast bir çalışma zamanı hatasına neden olmaz, ancak safe_cast kullanamaz mı? (aşağıdaki diğer cevaplara bakın) – developer

+2

dynamic_cast <> is, safe_cast <> is :) –

0

Sonra dynamic_cast (as benzeri null verir) ve typeid (is benzeri) kullanabilirsiniz.