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

时间:2009-03-11 15:53:56

标签: .net vb.net attributes language-design

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

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

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

例如,这是不可能的:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

如果你在反射器中打开TestAttr,我想你会发现这个类有一个带有2个参数的构造函数,并且有2个名为Optional1和Optional2的公共字段。

答案 1 :(得分:0)

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