我刚发现自己心不在焉地使用from
作为标识符。C#关键字何时未被保留?
我意识到有可能使用@
转义标识符名称,因此使用保留字,但我不明白为什么在这种情况下我没有任何警告或错误。
我不希望将保留字用于除预定目的之外的任何内容,但我不想再犯类似错误,并希望知道在某些情况下不保留语言关键字的原因。
我刚发现自己心不在焉地使用from
作为标识符。C#关键字何时未被保留?
我意识到有可能使用@
转义标识符名称,因此使用保留字,但我不明白为什么在这种情况下我没有任何警告或错误。
我不希望将保留字用于除预定目的之外的任何内容,但我不想再犯类似错误,并希望知道在某些情况下不保留语言关键字的原因。
某些关键字仅保留在某些上下文中,例如partial class
中的partial
。
请参阅this topic on MSDN下的“上下文关键字”。
它们不保留当它们上下文(MSDN link):
一个上下文关键字用于 提供在 代码特定的含义,但它不是一个保留字在 C#。一些上下文关键字,例如 部分和其中,在两个或更多的上下文中具有特殊的含义 。
C#团队专门设法避免在该语言中创建新的保留关键字。添加的任何新关键字意味着它会自动打破将该关键字用作标识符的现有代码。因此,只要有可能,C#将使用上下文关键字来最小化或消除破坏现有代码的可能性。
一个上下文关键字是一个只有在像from
,partial
,var
等特定环境中使用时的关键词......这方面不包括标识符:)
我不相信有已经有自C#2.0以来添加了新关键字(甚至不能确定2.0添加了一个)
from是'上下文关键字'。很多C#中的用户,在特定环境下使用时,它们的行为只是一个关键字。最大的好处是,在语言中添加这样的上下文关键字不会破坏现有的代码。
你会发现它们列在这个MSDN page的第二个表中。是的,从在那里。
大多数C#关键字始终保留。正如你发现的,有些只在某些情况下才被保留。他们被称为上下文关键字。我相信这是更好地确保向后兼容性的一种方式。
推理是在C#2中,from
是一个完全可以接受的变量名.C#3添加了LINQ,并且它们需要关键字。为了保持最大的兼容性,from
被添加为上下文关键字。
要回答的基本问题:
后C#1添加的所有关键字的上下文。这避免了重大改变。
除了访问者关键字(add
,remove
,get
和set
)之外,几乎所有的C#1关键字都是保留的。
一些关键字在写了很多代码之后添加,如Linq的关键字'from'。如果不可能使用它,它可能会破坏很多已经存在的代码。另外,如上所述,一些关键字仅在某些情况下。 – Pedro 2010-12-02 19:03:51
对于关键字具有特定含义的各种规则的某些分析,请参阅http://blogs.msdn.com/b/ericlippert/archive/tags/keywords/ – 2010-12-02 19:31:50