Visual Basic のバグと思われるものと格闘しています。私はおそらく何かが欠けています。うまくいけば、誰かがそれが何であるかを指摘できます。
バージョン 10.0 の Visual Basic 仕様のセクション 7.5 は、これがクラス宣言の文法であると述べています。リテラルと文法ノードの違いを示すイタリック体がないことを許してください。
ClassDeclaration ::=
[ Attributes ] [ ClassModifier+ ] Class Identifier [ TypeParameterList ] StatementTerminator
[ ClassBase ]
[ TypeImplementsClause+ ]
[ ClassMemberDeclaration+ ]
End Class StatementTerminator
ClassModifier ::= TypeModifier | MustInherit | NotInheritable | Partial
したがって、最小限のクラス宣言は次のようになります
Class Identifier StatementTerminator
End Class StatementTerminator
Identifier
およびその他のサポート ノードの文法は、13.1.2 で指定されています。
Identifier ::=
NonEscapedIdentifier [ TypeCharacter ] |
Keyword TypeCharacter |
EscapedIdentifier
NonEscapedIdentifier ::= < IdentifierName but not Keyword >
TypeCharacter ::=
IntegerTypeCharacter |
LongTypeCharacter |
DecimalTypeCharacter |
SingleTypeCharacter |
DoubleTypeCharacter |
StringTypeCharacter
IntegerTypeCharacter ::= %
LongTypeCharacter ::= &
DecimalTypeCharacter ::= @
SingleTypeCharacter ::= !
DoubleTypeCharacter ::= #
StringTypeCharacter ::= $
私の読書に基づいて、これfoo!
は正当な識別子である必要が!
ありTypeCharacter
ます.
したがって、上記の最小限の正当なクラスの宣言に基づいて、これは正当である必要があります。
Class foo!
End Class
しかし、Visual Studio 2010 では次のようになります。
このコンテキストでは、型宣言文字は無効です。
仕様に何か欠けているのでしょうか、それともコンパイラが仕様に同意していませんか?