3

VB.NET のクラス/プロパティ属性に、次のような奇妙なオプションの構文がある理由に興味があります。

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

VB.NET では、このようなオプションのパラメーターを設定して、注文の制限を回避することができます (これは素晴らしいことです) が、この場合はそれを強制しています。

たとえば、これは不可能です。

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

パラメータは元の定義と同じ順序ですが。

これには正当な理由がありますか?それとも、単に .NET の設計者がこの件に関して怠惰だったのでしょうか?

4

2 に答える 2

4

ここでは、オプションのパラメータと名前付き属性の引数を混同しているようです。属性を使用すると、コンストラクターに対応するパラメーターがない属性のパブリックフィールド/プロパティを設定することができます。VB.Netは、名前による呼び出し構文と同じ構文を使用することを選択しました。

リフレクターでTestAttrを開くと、クラスには2つの引数を取り、Optional1とOptional2という名前の2つのパブリックフィールドを持つコンストラクターがあることがわかります。

于 2009-03-11T15:57:54.290 に答える
0

必要なパラメーターはコンストラクターパラメーターです。オプションのものは、パブリック書き込み可能プロパティとして存在します。すべてのパラメーターを提供するコンストラクターを作成する必要があります。それは必ずしも価値があるとは限りません。

于 2009-03-11T15:59:04.803 に答える