Почему необязательные атрибуты класса в VB.NET имеют странный синтаксис? - PullRequest
3 голосов
/ 11 марта 2009

Мне просто любопытно, почему атрибуты класса / свойства в VB.NET имеют странный необязательный синтаксис, такой как:

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

VB.NET позволяет вам устанавливать такие необязательные параметры, чтобы избежать ограничений на заказ (что приятно), но в этом случае это заставляет вас.

Например, это невозможно:

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

, хотя параметры находятся в том же порядке, что и исходное определение.

Есть ли для этого веские причины? Или это просто .NET дизайнеры были ленивы на эту тему?

Ответы [ 2 ]

4 голосов
/ 11 марта 2009

Похоже, что вы путаете необязательные параметры с аргументами именованных атрибутов. Для атрибутов допустимо устанавливать открытое поле / свойства атрибута, которые не имеют соответствующего параметра в конструкторе. VB.Net решил использовать тот же синтаксис, что и синтаксис вызова по имени.

Если вы откроете TestAttr в отражателе, я думаю, вы обнаружите, что класс имеет конструктор, который принимает 2 аргумента и имеет 2 открытых поля с именами Optional1 и Optional2.

0 голосов
/ 11 марта 2009

Обязательные параметры - параметры конструктора. Необязательные присутствуют в качестве общедоступных доступных для записи свойств. Было бы необходимо создать конструкторы, которые предоставляют все параметры. Это не всегда стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...