2009-03-11 5 views
3

Я просто любопытно, почему класс/недвижимость атрибуты в VB.NET имеют странные дополнительный синтаксис, такие как:Почему дополнительные атрибуты класса в VB.NET имеют странный синтаксис?

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

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

Например это не представляется возможным:

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

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

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

ответ

4

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

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

+0

Я вижу, я никогда не писал атрибут, теперь это имеет смысл. Поскольку в публичном поле нет порядка, его нельзя использовать :) Теперь поймите. –

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^