Penyatuan jenis COM yang lancar dalam C# mencetuskan rasa ingin tahu pembangun. Artikel ini menyelami secara mendalam mekanisme pengkompil untuk mengesan jenis COM dan menggambarkan cara ia boleh mencapai operasi yang kelihatan tidak normal.
Satu aspek yang membingungkan pengendalian jenis COM ialah cara antara muka seperti Aplikasi dibina dalam C#. Pengkompil C# nampaknya membenarkan memanggil pembina pada antara muka, tingkah laku yang biasanya dilarang dalam bahasa lain. Ilusi ini dicapai dengan memanggil Type.GetTypeFromCLSID() secara tersirat untuk mendapatkan semula kelas COM yang betul, dan seterusnya memanggil Activator.CreateInstance untuk mencipta instance kelas tersebut.
Selain itu, C# 4 memperkenalkan ciri yang membolehkan pembangun menyediakan parameter bukan rujukan untuk parameter rujukan. Pengkompil secara automatik mencipta pembolehubah tempatan untuk dihantar melalui rujukan, dengan berkesan membuang nilai asal. Kod berikut menggambarkan tingkah laku ini:
<code class="language-c#">app.ActiveDocument.SaveAs(FileName: "test.doc");</code>
Parameter FileName secara teknikalnya ialah parameter rujukan, tetapi kod tersebut menghantar nilai tetap. Pengkompil mengendalikan perbezaan ini secara telus.
Cuba meniru senario pertama (menghasilkan antara muka secara langsung) telah terbukti tidak berjaya. Walau bagaimanapun, senario kedua boleh direplikasi menggunakan ref dan dalam pengubah suai, seperti berikut:
<code class="language-c#">Dummy dummy = null; dummy.Foo(in 10);</code>
Bertentangan dengan binaan Dummy() baharu yang dijangkakan, kod ini menggunakan pengubah suai dalam untuk menghantar pembolehubah melalui rujukan tanpa mengubah nilainya.
Kunci kepada pengkompil dapat mengenali jenis COM ialah atribut CoClass. Dengan menganotasi antara muka dengan [CoClass(typeof(Test))], pengkompil boleh membuat kesimpulan kewujudan kelas pelaksanaan asas dan menjana kod yang diperlukan untuk menjadikannya instan.
Penemuan ini membuka kemungkinan baharu untuk berinteraksi dengan jenis COM dalam C#, mempertingkatkan keupayaan saling kendali bahasa.
Atas ialah kandungan terperinci Bagaimanakah Pengkompil C# Mengendalikan Instalasi yang Nampak Luar Biasa dan Lulus Parameter Jenis COM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!