教科书问题,但我已经完成了我的谷歌搜索,我找不到任何东西。
给定名为SomeAttribute
的自定义属性,如何在VB.NET中执行以下操作?
void SomeMethod<[Some] T>()
{
}
我试过了:
Sub SomeMethod(<Some> Of T)()
End Sub
和
Sub SomeMethod(Of <Some> T)()
End Sub
但两者都无法编译,错误指向<Some>
。
答案 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附带)不支持泛型类型参数的属性。