我只是好奇为什么VB.NET中的类/属性属性有一个奇怪的可选语法,例如:
<TestAttr("a", "abc", Optional1:="foo", Optional2:=3)>
VB.NET允许你设置这样的可选参数,以避免订单限制(这很可爱),但在这种情况下,它会迫使你这样做。
例如,这是不可能的:
<TestAttr("a", "abc", "foo", 3)>
即使参数与原始定义的顺序相同。
这有什么好的理由吗?或者只是.NET设计师对这个问题很懒惰?
答案 0 :(得分:4)
看起来你在这里混淆了带有命名属性参数的可选参数。使用属性设置属性的公共字段/属性是合法的,该属性在构造函数中没有相应的参数。 VB.Net选择使用与通过名称语法调用相同的语法。
如果你在反射器中打开TestAttr,我想你会发现这个类有一个带有2个参数的构造函数,并且有2个名为Optional1和Optional2的公共字段。
答案 1 :(得分:0)
所需参数是构造函数参数。可选的存在作为公共可写属性。有必要创建提供所有参数的构造函数。这并不值得。