如何在VB.NET中为泛型参数指定自定义属性?

时间:2013-03-12 17:11:38

标签: vb.net

教科书问题,但我已经完成了我的谷歌搜索,我找不到任何东西。

给定名为SomeAttribute的自定义属性,如何在VB.NET中执行以下操作?

void SomeMethod<[Some] T>()
{
}

我试过了:

Sub SomeMethod(<Some> Of T)()
End Sub

Sub SomeMethod(Of <Some> T)()
End Sub

但两者都无法编译,错误指向<Some>

1 个答案:

答案 0 :(得分:3)

鉴于这里的沉默,并且因为我真的需要答案,我挖掘了VB.NET Language Specification

它从未明确说明是否支持,但它确实有一些正式的语法定义,这表明VB.NET不支持这种定义。

具体来说,第9.2.1节定义了以下方法声明的制作:

SubSignature  ::=  Sub  Identifier  [  TypeParameterList  ]
    [  OpenParenthesis  [  ParameterList  ]  CloseParenthesis  ]

在9.2.5中,参数定义如下:

ParameterList  ::=
    Parameter  |
    ParameterList  Comma  Parameter

Parameter  ::=
    [  Attributes  ]  [  ParameterModifier+  ]  ParameterIdentifier  [  As  TypeName  ]
            [  Equals  ConstantExpression  ]

第13.3节定义了TypeParameterList

TypeParameterList  ::=
    OpenParenthesis  Of  TypeParameters  CloseParenthesis

TypeParameters  ::=
    TypeParameter  |
    TypeParameters  Comma  TypeParameter

TypeParameter  ::=
    [  VarianceModifier  ]  Identifier  [  TypeParameterConstraints  ]

VarianceModifier  ::=
    In  |  Out

TypeParameterConstraints  ::=
    As  Constraint  |
    As  OpenCurlyBrace  ConstraintList  CloseCurlyBrace

ConstraintList  ::=
    ConstraintList  Comma  Constraint  |
    Constraint

Constraint  ::=  TypeName  |  New  |  Structure  |  Class

属性在参数列表中出现(对于函数,在返回类型中),但TypeParameterList完全没有与属性相关的任何内容。

所以我要继续并声称VB.NET 10(VS2012附带)不支持泛型类型参数的属性。