带参数的属性

时间:2011-12-21 22:59:02

标签: c# vb.net properties

我在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

注意:我无法更改VB.NET代码,因为它是编译DLL。

先谢谢

3 个答案:

答案 0 :(得分:10)

参数化属性将转换为get_set_方法。

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

答案 1 :(得分:6)

C#不支持没有Default关键字的索引属性。您可以简单地使用get_AsString()来调用属性getter,使用set_AsString()来调用setter。方法,而不是属性。它们应该很容易显示在IntelliSense列表中。

另请注意,即使您将属性设置器设置为非索引,set_AsString()也需要两个参数。传递任何东西,null都可以。

Fwiw,这或许说明了为什么C#团队决定不支持一般情况下的索引属性。吸气剂和定位器之间的不匹配是痛苦的。 vb.net团队别无选择,Visual Basic早在.NET出现之前就已经有了。它确实在C#版本4中部分回归,但COM接口支持索引属性。没有它们,COM互操作编程太痛苦了。特别是在Office对象模型中。

答案 2 :(得分:0)

如果您注意到实际上您的属性中有两个参数,则一个是您的名字,另一个是默认值,因此当您使用该参数时,您必须提供两个参数值