簡體   English   中英

從C#創建COM索引屬性?

[英]Creating a COM indexed property from C#?

我試圖用一個新的.net來模仿一個舊的vb6 dll。 模仿必須是完美的,以便呼叫者不知道他們正在使用新的.dll。

我有一種好奇心。 在VB6中,它在對象庫中具有以下內容:

Property BankList(Index As Long) As String

但AFAIK屬性這不能在.net中完成嗎?

我能得到的最接近的是創建一個展示該行為的函數,然后COM類型從Property轉到Method。

任何人都可以建議我如何使用屬性創建該簽名?

您可以使用IndexerNameAttribute屬性來裝飾常規索引器 ,以將其名稱公開給其他語言。 不過,我不確定這是否會實現你的目標。

不幸的是,C#僅支持調用命名索引器作為COM互操作的一部分,沒有支持的語言方式來實現自己的(即,一個類只能有一個IndexerNameAttribute屬性的默認索引器 )。

您可以通過實現具有索引器的類型然后具有該類型的屬性來創建與C#調用者類似的內容,但它不會精確映射到您需要的VB6等效項。

另請參閱: 使用索引器(C#)

在旁邊
正如其他答案中所提到的,雖然C#不支持命名索引器,但.NET CLR和其他一些語言(如VB.NET)也可以。 您可能需要考慮更改目標語言才能獲得此功能。

根據http://blogs.msdn.com/b/kirillosenkov/archive/2009/10/20/indexed-properties-in-c-4-0.aspx,您無法在C#中聲明索引屬性。 但是,與其他一些答案所述的情況相反,CLR 確實支持它們,您可以在VB.NET中聲明它們。

命名parametrised屬性不能在C#(只有一個默認的,所謂的創建this是可用的)。

有很多選擇:

  • 更改界面(但由於客戶端代碼需要更改,因此忽略了這一點)。
  • 使用VB(.net),它可以創建這樣的屬性。
  • 使用C ++創建適配器以在COM級別提供完全控制。

第一個意味着更改界面,這會破壞您的要求。 最后一個選項提供了最多的控制權,但是要復雜得多(除非你已經知道C ++ COM開發)。 我會選擇VB.NET。

索引屬性在.Net / C#中可用,但您無法命名它們:

public String this[long index]
{
    get; set;
}

這使得一個名為Item的屬性,但您不在C#中使用此名稱:

myObj[1L];

如果要使用C#4.0調用COM中的命名屬性,可以:

excel.Range["a"];

http://blogs.msdn.com/b/kirillosenkov/archive/2009/10/20/indexed-properties-in-c-4-0.aspx

最后,如果要為COM語言命名索引,可以使用IndexerNameAttribute將索引器公開為命名屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM