首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

深入理解 C# 中 @ 符號在字串前的用法與差異

     編輯:關於C#

在 C# 程式設計中,@ 符號有兩種截然不同的用途:一是用於字串字面值前,表示「逐字字串」;二是用於識別碼前,允許使用 C# 關鍵字作為變數名稱。許多開發者容易混淆這兩者,導致程式行為不如預期。本文透過實際程式碼範例,詳細剖析兩者的差異與正確用法。

逐字字串與一般字串的差別

當 @ 放在字串字面值之前(如 @"\a"),它會告訴編譯器這是一個逐字字串。在逐字字串中,逸出序列不會被解析,反斜線 \ 就是單純的反斜線字元。相反地,一般字串 "\a" 會將 \a 視為逸出序列(雖然 \a 在 C# 中並非標準逸出字元,編譯器會發出警告)。

識別碼前的 @ 符號

當 @ 放在參數或變數名稱前(如 string @str),它的作用是讓該識別碼可以使用 C# 保留字。例如 int @class = 1; 是合法的,而 int class = 1; 則會編譯錯誤。這在與其他語言互通或使用程式碼產生工具時很實用。

實戰測試程式碼

以下程式碼在 ASP.NET 環境下執行,展示四種組合情況:

protected void Page_Load(object sender, EventArgs e)
{
    test1("\a");
    test1(@"\a");
    test2("\a");
    test2(@"\a");
    test3("\a");
    test3(@"\a");
    test4("\a");
    test4(@"\a");
}

// 參數無 @,呼叫無 @
public void test1(string str)
{
    Response.Write("test1:[" + str + "]<br/>");
}

// 參數無 @,呼叫有 @
public void test2(string str)
{
    Response.Write("test2:[" + @str + "]<br/>");
}

// 參數有 @,呼叫無 @
public void test3(string @str)
{
    Response.Write("test3:[" + str + "]<br/>");
}

// 參數有 @,呼叫有 @
public void test4(string @str)
{
    Response.Write("test4:[" + @str + "]<br/>");
}

執行結果分析

執行後會發現:

  • test1:輸入 "\a" 輸出 \a(編譯器警告無法辨識的逸出序列,保留原樣);輸入 @"\a" 輸出 \a。
  • test2:@str 在輸出時並不改變字串內容,@ 這裡只是多餘的前綴,結果同 test1。
  • test3:參數名稱為 @str,但在方法內部使用時仍寫 str,行為同 test1。
  • test4:參數與呼叫皆加 @,結果無異。

結論:@ 在字串字面值前影響逸出序列解析;在識別碼前僅允許使用關鍵字作為名稱,不影響字串內容。兩者用途完全不同,切勿混淆。

執行結果圖示

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved