gpt4 book ai didi

c# - Bang 与 Visual Basic 中的默认属性

转载 作者:太空狗 更新时间:2023-10-29 21:42:01 24 4
gpt4 key购买 nike

对于给定的类,具有默认属性列表,您可以通过执行 myClass.defProperty("key") 访问列表中的实例对象。您也可以通过键入 myClass.defProperty!Key 获得相同的结果。

有人告诉我,运行时访问属性的方式使用括号和引号会更快,但我想了解它们之间的区别以及它们的工作原理...

我知道 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 看起来像一个变量而不是一个字符串(它确实是)。即使是 Stack Overflow 颜色编码也使 Foo 看起来像一个关键字!

此代码的 C# 等价物是 x["Foo"];。没有等效的 ! 语法。

所以,底线是 ! 在性能上没有好坏之分,只是可能会使代码维护更加困难,因此应该避免。

关于c# - Bang 与 Visual Basic 中的默认属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3883309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com