EDIT: Sonuçları bir blog yazısı olarak yazdım .
C # derleyicisi COM türlerini sihirli bir şekilde tedavi eder. Örneğin, bu ifade normal görünüyor ...
Word.Application app = new Word.Application();
... Application
bir arayüz olduğunu anlayana kadar . Bir arayüzde bir kurucu mu arıyorsunuz? Yoiks! Bu aslında bir Type.GetTypeFromCLSID()
ve başka bir çağrıya çevrilir Activator.CreateInstance
.
Ayrıca, C # 4'te, ref
parametreler için ref olmayan bağımsız değişkenleri kullanabilirsiniz ve derleyici, sonuçları atarak başvuruya geçmek için yalnızca yerel bir değişken ekler:
// FileName parameter is *really* a ref parameter
app.ActiveDocument.SaveAs(FileName: "test.doc");
(Evet, bir takım argümanlar eksik. İsteğe bağlı parametreler hoş değil mi? :)
Derleyici davranışını araştırmaya çalışıyorum ve ilk bölümü taklit edemiyorum. İkinci kısmı sorunsuz yapabilirim:
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
[ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")]
public interface Dummy
{
void Foo(ref int x);
}
class Test
{
static void Main()
{
Dummy dummy = null;
dummy.Foo(10);
}
}
Yazabilmek istiyorum:
Dummy dummy = new Dummy();
rağmen. Açıkçası infaz zamanında patlama olacak, ama sorun değil. Sadece deniyorum.
Derleyici tarafından bağlantılı COM PIA'lar için eklenen diğer özellikler ( CompilerGenerated
ve TypeIdentifier
) hile yapmıyor gibi görünüyor ... sihirli sos nedir?
dynamic
... COM dışında neden önemli olduğunu görmek için statik / güçlü yazmaya çok alışkınız.