2

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

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

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

我试过这个:

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

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

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

4

1 回答 1

4

考虑到这里的沉默,并且因为我真的需要一个答案,我深入研究了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 提供)不支持泛型类型参数的属性。

于 2013-03-12T17:57:16.640 回答