带参数的属性

ANK*_*KIT 9 c# vb.net properties

我在VB.NET中遇到了一些奇怪的事情,以前从未注意到......

我在VB.NET中有一个带有参数属性的类,我希望通过创建VB.NET类的对象而在其他C#类中使用该属性,但是类对象没有显示该属性,任何人都可以告诉我是否可以访问该属性属性转换成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
Run Code Online (Sandbox Code Playgroud)

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

提前致谢

Han*_*ood 10

参数化属性转换为get_set_方法.

string name = "Foo";
string value = "Bar";
MyObject.set_AsString(name, value);
string fooValue = MyObject.get_AsString(name);
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 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对象模型中.