本節給出的標識符規則完全符合 Unicode 標准附件 15 推薦的規則,但以下情況除外:允許將下劃線用作初始字符(這是 C 編程語言的傳統),允許在標識符中使用 Unicode 轉義序列,以及允許“@”字符作為前綴以使關鍵字能夠用作標識符。
- identifier:(標識符:)
- available-identifier(可用的標識符)
@ identifier-or-keyword(@ 標識符或關鍵字)
- available-identifier:(可用的標識符:)
- 不是“關鍵字”的“標識符或關鍵字”
- identifier-or-keyword:(標識符或關鍵字:)
- identifier-start-character identifier-part-charactersopt(標識符開始字符 標識符部分字符可選)
- identifier-start-character:(標識符開始字符:)
- letter-character(字母字符)
_
(下劃線字符 U+005F
)
- identifier-part-characters:(標識符部分字符:)
- identifier-part-character(標識符部分字符)
identifier-part-characters identifier-part-character(標識符部分字符 標識符部分字符)
- identifier-part-character:(標識符部分字符:)
- letter-character(字母字符)
decimal-digit-character(十進制數字字符)
connecting-character(連接字符)
combining-character(組合字符)
formatting-character(格式設置字符)
- letter-character:(字母字符:)
- 類 Lu、Ll、Lt、Lm、Lo 或 Nl 的 Unicode 字符
表示類 Lu、Ll、Lt、Lm、Lo 或 Nl 的字符的 unicode 轉義序列
- combining-character:(組合字符:)
- 類 Mn 或 Mc 的 Unicode 字符
表示類 Mn 或 Mc 的字符的 unicode 轉義序列
- decimal-digit-character:(十進制數字字符:)
- 類 Nd 的 Unicode 字符
表示類 Nd 的字符的 unicode 轉義序列
- connecting-character:(連接字符:)
- 類 Pc 的 Unicode 字符
表示類 Pc 的字符的 unicode 轉義序列
- formatting-character:(格式設置字符:)
- 類 Cf 的 Unicode 字符
表示類 Cf 的字符的 unicode 轉義序列
有關上面提到的 Unicode 字符類的信息,請參見《Unicode 標准 3.0 版》的第 4.5 節。
有效標識符的例子包括“identifier1
”、“_identifier2
”和“@if
”。
符合規范的程序中的標識符必須符合由“Unicode 標准化格式 C”(按“Unicode 標准附錄 15”中的定義)定義的規范格式。當遇到非“標准化格式 C”格式的標識符時,怎樣處理它可由 C# 的具體實現確定,但是不要求診斷。
使用前綴“@
”可以將關鍵字用作標識符,這在與其他編程語言建立接口時很有用。字符 @
並不是標識符的實際組成部分,因此在其他語言中可能將此標識符視為不帶前綴的正常標識符。帶 @
前綴的標識符稱作逐字標識符。允許將 @
前綴用於非關鍵字的標識符,但是(從代碼書寫樣式的意義上)強烈建議不要這樣做。
示例:
class @class
{
public static void @static(bool @bool) {
if (@bool)
System.Console.WriteLine("true");
else
System.Console.WriteLine("false");
}
}
class Class1
{
static void M() {
cl\u0061ss.st\u0061tic(true);
}
}
定義一個名為“class
”的類,該類具有一個名為“static
”的靜態方法,此方法帶一個名為“bool
”的參數。請注意,由於在關鍵字中不允許使用 Unicode 轉義符,因此標記“cl\u0061ss
”是標識符,與“@class
”標識符相同。
兩個標識符如果在按順序實施了下列轉換後相同,則被視為相同:
- 如果使用了前綴“
@
”,移除它。
- 將每個“unicode 轉義序列”轉換為它的對應 Unicode 字符。
- 移除所有“格式化字符”。
包含兩個連續下劃線字符 (U+005F
) 的標識符被保留供具體實現使用。例如,一個實現可以設置它自己的以兩個下劃線開頭的擴展關鍵字。