C# 編譯器中的 COM 類型偵測
C# 編譯器對 COM 類型採取特殊處理方式,例如允許實例化介面並將非 ref 參數作為 ref 參數處理。這種行為源自於特定屬性和技術的應用。
為了模擬建立介面實例的行為,請考慮使用 CoClass 屬性。將 [CoClass] 屬性套用至介面會將其與實作該介面的具體類別關聯起來:
<code>[CoClass(typeof(MyClass))] public interface IMyInterface { }</code>
這使得可以如下實例化 IMyInterface:
<code>IMyInterface instance = new MyClass();</code>
或者,可以使用 Type.GetTypeFromCLSID() 和 Activator.CreateInstance() 方法分別檢索類型並建立實例。
關於 ref 參數的處理,當提供非 ref 參數時,C# 編譯器會新增一個局部變數以透過引用傳遞。為了說明這一點,請考慮以下程式碼:
<code>// Filename 参数实际上是一个 ref 参数 app.ActiveDocument.SaveAs(Filename: "test.doc");</code>
在這種情況下,編譯器產生的程式碼會建立一個局部變數來保存 Filename 參數,並將此變數作為 ref 參數傳遞給 SaveAs 方法。
透過利用 CoClass 屬性和編譯器處理 ref 參數的能力,開發人員可以有效地在 C# 程式碼中與 COM 類型進行互動。
以上是C# 編譯器如何處理 COM 類型實例化和 Ref 參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!