[英]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
是可用的)。
有很多選擇:
第一個意味着更改界面,這會破壞您的要求。 最后一個選項提供了最多的控制權,但是要復雜得多(除非你已經知道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.