2009-11-30 11 views
6

Hala derin ve eski bilgimi C/C++'dan biraz daha sığ .Net bilgisine eşlemeye çalışıyorum. Bugün C# 'da "as" (ve dolaylı olarak "olduğu" ve "olduğu" zaman) geldi.COM'da QueryInterface veya C++ içindeki dynamic_cast ile karşılaştırıldığında "as" maliyetini nedir?

bir QueryInterface veya dynamic_cast olmasıdır "olarak" C# için (işaretçi bağımsız değişkenle bir dynamic_cast, başvuramaz, yani) benim zihinsel modeli. Sorum şu anda iki katlıdır:

  1. Karşılaştırma adil mi?
  2. QueryInterface veya dynamic_cast ile karşılaştırıldığında "as" ifadesinin göreceli maliyeti nedir?

cevap

4
  1. Evet, karşılaştırma işaretçiler ile uğraşan, özellikle adil. Her üçü de başarılı olur ve hedef türünün sıfır olmayan bir göstericisini döndürür veya null değerini döndürür. yönetilen/COM birlikte çalışma için yükü küçük bir miktarı ile QueryInterface için o eşdeğer hale .NET COM nesneleri ile çalışırken

  2. Aslında as operatörünü kullanabilirsiniz. CLR (yönetilen tipler arasında döküm) içinde, as işleci, COM içinde QueryInterface ya da C++ içinde 'a kıyasla son derece hafiftir. Benim kodumda 'un herhangi bir nedenle dinamik döküm kullanmak için olduğu tüm yerler için, as operatör gösterisini profillemede bile tek bir örnek olarak görmüştüm - ve dinamik olarak yazılan, çalışma zamanı bağlı bir uygulamanın sürdürülmesini düşünürsek language (StringTemplate), bunun bir şey ifade ettiğini varsayalım. :)

İlgili konular