我在VB.NET中遇到了一些奇怪的事情,从未注意过......
我在 VB.NET 中有一个带有参数的属性的课程,我想在其他 C#中使用该属性类通过制作VB.NET类的对象但类对象没有显示该属性,任何人都可以告诉我是否可以将该属性访问到C#中。
这是我的代码......
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。
先谢谢
答案 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)
如果您注意到实际上您的属性中有两个参数,则一个是您的名字,另一个是默认值,因此当您使用该参数时,您必须提供两个参数值