2011-12-21 73 views
8

我有一些奇怪的事情到VB.NET,以前從來沒有注意到...屬性與參數

我在具有屬性與參數VB.NET一類,我想使用屬性在其他C#類通過使VB.NET類的對象,但類對象不顯示該屬性,可以告訴我,我是否可以訪問該屬性到C#或不。

  • 如果是,如何?
  • 如果否,CLR是什麼意思?

這裏是我的代碼...

Public Property AsString(ByVal name As String) As String 
    Get 
      //Some code 
    End Get 
    Set(ByVal value As String) 
      //Some code 
    End Set 
End Property 

注:它在編譯的DLL我不能改變的VB.NET代碼。

由於提前

+0

工作,你是什麼意思與屬性的意思參數? – 2011-12-21 23:06:21

+1

爲什麼你提到[CLR](http://en.wikipedia.org/wiki/Common_Language_Runtime)? – 2011-12-21 23:07:02

+0

我知道這是4年後,但直到現在我還沒有這樣做。那麼C#是否仍然支持具有參數的屬性呢?我在VB中看到過它,但從未在C#中看到它。我認爲答案是肯定的,C#不支持。我只是想驗證一下。 – Rod 2015-11-18 21:02:39

回答

10

參數化的屬性轉換爲get_set_方法。

string name = "Foo"; 
string value = "Bar"; 
MyObject.set_AsString(name, value); 
string fooValue = MyObject.get_AsString(name); 
+0

哦!愛你們!!非常感謝你... – ANKIT 2011-12-22 00:23:56

6

C#不支持沒有Default關鍵字的索引屬性。你簡單的使用get_AsString()來調用屬性getter和set_AsString()來調用setter。方法,而不是屬性。他們應該很快顯示在智能感知列表中。

另請注意,set_AsString()需要兩個參數,即使您將屬性設置器設置爲非索引。通過任何東西,null會做。 Fwiw,這也許可以說明爲什麼C#團隊決定不支持一般情況下的索引屬性。吸氣劑和吸氣劑之間的不匹配是痛苦的。 vb.net團隊沒有選擇,Visual Basic早在.NET出現之前就已經擁有了它們。儘管它在C#版本4中部分恢復,但COM接口支持索引屬性。沒有它們,COM互操作編程就太痛苦了。特別是在Office對象模型中。

+0

你在說什麼「不匹配」?該屬性設置器被編入索引; setter的「參數列表」只包含該值,因爲它是唯一沒有在屬性定義本身中指定的值。可以有輕微的明顯歧義如果索引和非索引屬性具有相同的名稱,以及非索引屬性的類型都有一個默認的索引,但在現實中不存在歧義:'thing.prop(X)'將綁定到一個合適的索引屬性,如果存在的話;如果你想使用非索引的索引結果,可以使用'(thing.prop)(x)'。 – supercat 2012-06-26 17:24:58

+0

這樣的事情可能是有用的,如果有一個例如其保持的鍵和值的順序的字典它們加入,並使其鍵或值通過數字索引進行訪問,除了允許通過按鍵來訪問值。 'MyDict.Keys(2)'將添加的第三密鑰,和'MyDict.Values(2)'。將其相應的值。人們可以通過具有'MyDict.Keys'和'MyDict.Values'都返回其持有的參考字典,並有一個索引這將調用該詞典合適的功能結構實現類似的結果,但是這將是ickier。 – supercat 2012-06-26 17:38:22

+0

如果他們這樣做是像在C++/CLI和執行該getter和setter必須定義和使用相同的參數,那麼不應該有任何的困惑:'公共字符串來源[INT i_ixSource] {得到(INT i_ixSource){。 ..}設置(INT i_ixSource){...}}'目前它在屁股大的痛苦,我來解決幾十個,我在我的C語言實現++/CLI代碼,而轉換爲C#漂亮的參數性能。 – 2017-07-11 08:54:51

0

如果妳實際上已經注意到有你的財產兩個參數一個是你的名字和其他爲默認值,因此u必須提供兩個參數值當u與