2015-03-31 128 views
6

讓我忘記爲什麼我需要這個。我們可以創建名稱爲「class」的課程嗎?

我們可以創建一個名爲「class」的類。

下面的代碼導致編譯錯誤,因爲class是一個保留關鍵字。

public class class 
{ 

} 

所以有沒有什麼黑客或欺騙C#編譯器的方法? :)

這個問題在面試官問我最後一次採訪時,他告訴我這是可能的。

+2

你類應該具有大寫名稱'Class'反正。 – 2015-03-31 09:49:13

+0

添加到亞歷克斯的好評 - _ [DO名**類**和名詞或名詞短語結構,使用** PascalCasing **。](https://msdn.microsoft.com/zh-cn/library/ms229040 %28V = vs.110%29。aspx)_ – MickyD 2015-03-31 09:51:41

回答

21

你可以使用:

public class @class 
{ 

} 

但是爲什麼你要嗎?

C# Keywords

關鍵詞是預定義的,保留的標識符具有特殊的含義 的編譯器。除非它們包含@作爲前綴,否則它們不能用作 程序中的標識符。例如,@if是有效的 標識符,但是如果不是因爲if是關鍵字。


什麼我已經從這個答案的教訓是新的鍵字不會在全球範圍內,但僅添加上下文關鍵字,以避免破壞寫在早期版本的程序。您可以在上面的鏈接中找到一個列表。

所以有趣的是,這是有效的(更好:編譯)代碼:

public class var 
{ 
    public void foo() 
    { 
     var var = new var(); 
    } 
} 

這裏的另一個問題:

public class dynamic 
{ 
    public void foo() 
    { 
     dynamic dynamic = new dynamic(); 
    } 
} 

但從來沒有做到這一點。它會破壞你之前使用過vardynamic的其他代碼。

+3

這不是你想要的手寫代碼,但它可以在經常生成的代碼中發生,也就是說,如果你有一個名爲* Classes *,* Groups *等的表,並讓ORM生成代碼它 – SWeko 2015-03-31 09:50:16

+0

正如我上面提到的那個問題在我的一次採訪中被問到,所以我一直在尋找解決方案。謝謝它的作品。只需等待15分鐘即可接受答案。 – 2015-03-31 09:50:29

+2

@JineshJain重要的是要注意在C#編譯器級別「@」是「解釋」的。當它被編譯時,函數將是'class',而不是'@ class'(如果反彙編代碼,你可以看到它)例如http://goo.gl/mmyLQU – xanatos 2015-03-31 09:54:05

8

另一種替代方案是通過統一

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     cl\u0061ss a = new cl\u0061ss(); 
     Console.WriteLine(a.GetType().Name); 
    } 
} 

public class cl\u0061ss 
{ 


} 

注意Console.WriteLine()將打印

DotNetFiddle鏈接here

+1

應該去混淆的C#比賽 – DrKoch 2015-03-31 09:58:54

+0

@DrKoch哈哈...我剛剛從msdn中獲得了這個想法鏈接https://msdn.microsoft.com/zh-cn/library/aa664670(v=vs.71).aspx – 2015-03-31 10:02:07

+0

並非所有可能做到的事情都是一個好主意...... – DrKoch 2015-03-31 10:03:47

-3

大多數程序員在變量名稱的開頭使用下劃線'_',或者如果它是保留字,例如

public class _class 
{ 

} 

變量聲明例如

int _int; 
+1

但是,然後根據OP的訪問者的要求,類名是「_class」而不是「class」。 – 2016-01-02 10:50:48

相關問題