Ira*_*ter 6 c# keyword language-specifications c#-4.0
我有一个C#4.0解析器.它接受'dynamic'作为关键字作为类型.我的解析器会跳过以下形式的C#3.0程序中发现的语句:
dynamic = <exp> ;
Run Code Online (Sandbox Code Playgroud)
那么,它真的是动态关键字吗?或者它仍然可以用作任意标识符名称?(如果是这样,为什么'int'不是以同样的方式对待)?
是否有某个参考规范说明dynamic是否是关键字?最新的ECMA C#4规范甚至没有提到"动态",我在MS网站上找到的最好的是"初步规范",它说它是一个关键字,但我怀疑这只是草率的写作.
它不是像"普通"这样的关键字if,for等等.
它是一个上下文关键字,如yield,from等等.
特别是,这编译:
object dynamic = 0; // dynamic is a contextual keyword
Run Code Online (Sandbox Code Playgroud)
但这不是:
object string = 0; // string is a regular keyword
Run Code Online (Sandbox Code Playgroud)
你必须string像这样"逃避" :
object @string = 0;
Run Code Online (Sandbox Code Playgroud)
这在后向兼容性方面很有意义:很多人不太可能创建一个被调用的类型dynamic(这会导致歧义; IIRC,"真实"类型在这种情况下获胜)而现有代码很可能使用被调用的变量dynamic.
在某些方面,它甚至不需要是一个上下文关键字(我不相信规范曾经明确地指明它) - 你可以把它看作一个总是可用的类型的名称(像string和object).我认为string等等是从v1制作关键字以避免混淆,但添加真正的关键字(不能用作标识符)现在会有很高的兼容性成本.
| 归档时间: |
|
| 查看次数: |
900 次 |
| 最近记录: |