C# VisualBasic中的Bang vs Default属性

C# VisualBasic中的Bang vs Default属性,c#,.net,vb.net,C#,.net,Vb.net,对于给定的类,使用默认属性list,可以通过执行myClass.defProperty(“key”)来访问列表中的实例对象。您也可以通过键入myClass.defProperty获得相同的结果!钥匙 有人告诉我,对于运行时访问属性的方式,使用括号和引号更快,但我想了解两者的区别以及它们是如何工作的 我知道C#也有类似的行为,用方括号替换括号。给出了Visual Basic.NET中的以下代码: Dim x As New Dictionary(Of String, String) x.Item("

对于给定的类,使用默认属性list,可以通过执行myClass.defProperty(“key”)来访问列表中的实例对象。您也可以通过键入myClass.defProperty获得相同的结果!钥匙

有人告诉我,对于运行时访问属性的方式,使用括号和引号更快,但我想了解两者的区别以及它们是如何工作的


我知道C#也有类似的行为,用方括号替换括号。

给出了Visual Basic.NET中的以下代码:

Dim x As New Dictionary(Of String, String)
x.Item("Foo") = "Bar"
您可以使用以下任一方法访问字典的“Foo”成员:

Dim a = x!Foo
Dim b = x("Foo")
Dim c = x.Item("Foo")
如果查看Reflector.NET下的IL,您会发现它们都转化为:

Dim a As String = x.Item("Foo")
Dim b As String = x.Item("Foo")
Dim c As String = x.Item("Foo")
因此,它们在IL中都是等价的,当然,它们都以相同的速度执行

bang运算符仅允许使用符合标准变量命名规则的静态定义键

使用索引方法,您的键几乎可以是任何有效值(在本例中为字符串),并且您可以使用变量来表示键

对于代码可读性,我建议使用
x.Item(“Foo”)
符号,因为它非常清楚正在发生什么
x(“Foo”)
可能与调用过程和
x混淆!Foo
使
Foo
看起来像一个变量,而不是一个字符串(实际上是字符串)。即使是堆栈溢出颜色编码也会使
Foo
看起来像一个关键字

该代码的C#等价物是
x[“Foo”]。没有
语法等效


所以,底线是
在性能上并没有更好或更差,只是可能会使代码维护更加困难,所以应该避免。

供将来参考。。。我现在意识到,出于调试目的,
更好,因为它允许您站在断点上查看当前索引中项目的内容,而其他人会告诉您
无法查看索引属性