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与