.net - 为什么 VB.NET 中的可选类属性有一个奇怪的语法?

标签 .net vb.net attributes language-design

我很好奇为什么 VB.NET 中的类/属性属性有一个奇怪的可选语法,例如:

<TestAttr("a", "abc", Optional1:="foo", Optional2:=3)>

VB.NET 允许您像这样设置可选参数以避免顺序限制(这很可爱)但在这种情况下它会强制您这样做。

例如这是不可能的:

<TestAttr("a", "abc", "foo", 3)>

即使参数与原始定义的顺序相同。

这有什么好的理由吗?或者只是 .NET 设计者在这个问题上懒惰?

最佳答案

看起来您在这里混淆了可选参数和命名属性参数。对于属性,在构造函数中设置没有相应参数的属性的公共(public)字段/属性是合法的。 VB.Net 选择使用与按名称调用语法相同的语法。

如果您在反射器中打开 TestAttr,我想您会发现该类有一个构造函数,它接受 2 个参数并有 2 个公共(public)字段,名称为 Optional1 和 Optional2。

关于.net - 为什么 VB.NET 中的可选类属性有一个奇怪的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635167/

相关文章:

vb.net - 在 VB.NET 中查询 LDAP。我有用户帐户,我想要一个用户所在组的列表

jquery - 使用jquery获取两个字符串之间的字符串

c# - 当枚举 SortedDictionary 时,它是否按预期顺序返回 KeyValuePairs?

c# - 在没有数据源的情况下加载时,DropDownList 不会触发其 SelectedIndexChanged

.net - 与 Iesi.Collections 相关的 System.IO.FilenotFoundException

c# - 静态构造函数 - C# 中的单例设计模式

mysql - MySqlCommand 上的查询语法错误

.net - "PublicKeyToken <..> is not a valid extension type."错误?

javascript - 以编程方式选择javascript中对象的属性

javascript - 为什么 DOM 与源代码中的属性大小写会发生变化?