我剛發現自己心不在焉地使用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