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

为什么VB.NET中的可选类属性有奇怪的语法?,.net,vb.net,attributes,language-design,.net,Vb.net,Attributes,Language Design,我只是好奇为什么VB.NET中的类/属性属性有一个奇怪的可选语法,例如: <TestAttr("a", "abc", Optional1:="foo", Optional2:=3)> VB.NET允许您设置这样的可选参数,以避免订单限制(这很好),但在这种情况下,它迫使您这样做 例如,这是不可能的: <TestAttr("a", "abc", "foo", 3)> 即使参数的顺序与原始定义相同 有什么好的理由吗?或者仅仅是.NET设计人员在这个问题上懒惰?看起

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

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

VB.NET允许您设置这样的可选参数,以避免订单限制(这很好),但在这种情况下,它迫使您这样做

例如,这是不可能的:

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

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


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

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


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

所需的参数是构造函数参数。可选属性作为公共可写属性存在。有必要创建提供所有参数的构造函数。这并不总是值得的。

我知道我从来没有写过属性,现在它更有意义了。因为公共领域没有秩序,所以不能使用:)现在就有意义了。