带参数的属性

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

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

提前致谢

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

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

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

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

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

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