讓我忘記爲什麼我需要這個。我們可以創建名稱爲「class」的課程嗎?
我們可以創建一個名爲「class」的類。
下面的代碼導致編譯錯誤,因爲class是一個保留關鍵字。
public class class
{
}
所以有沒有什麼黑客或欺騙C#編譯器的方法? :)
這個問題在面試官問我最後一次採訪時,他告訴我這是可能的。
讓我忘記爲什麼我需要這個。我們可以創建名稱爲「class」的課程嗎?
我們可以創建一個名爲「class」的類。
下面的代碼導致編譯錯誤,因爲class是一個保留關鍵字。
public class class
{
}
所以有沒有什麼黑客或欺騙C#編譯器的方法? :)
這個問題在面試官問我最後一次採訪時,他告訴我這是可能的。
你可以使用:
public class @class
{
}
但是爲什麼你要嗎?
關鍵詞是預定義的,保留的標識符具有特殊的含義 的編譯器。除非它們包含@作爲前綴,否則它們不能用作 程序中的標識符。例如,@if是有效的 標識符,但是如果不是因爲if是關鍵字。
什麼我已經從這個答案的教訓是新的鍵字不會在全球範圍內,但僅添加上下文關鍵字,以避免破壞寫在早期版本的程序。您可以在上面的鏈接中找到一個列表。
所以有趣的是,這是有效的(更好:編譯)代碼:
public class var
{
public void foo()
{
var var = new var();
}
}
這裏的另一個問題:
public class dynamic
{
public void foo()
{
dynamic dynamic = new dynamic();
}
}
但從來沒有做到這一點。它會破壞你之前使用過var
或dynamic
的其他代碼。
這不是你想要的手寫代碼,但它可以在經常生成的代碼中發生,也就是說,如果你有一個名爲* Classes *,* Groups *等的表,並讓ORM生成代碼它 – SWeko 2015-03-31 09:50:16
正如我上面提到的那個問題在我的一次採訪中被問到,所以我一直在尋找解決方案。謝謝它的作品。只需等待15分鐘即可接受答案。 – 2015-03-31 09:50:29
@JineshJain重要的是要注意在C#編譯器級別「@」是「解釋」的。當它被編譯時,函數將是'class',而不是'@ class'(如果反彙編代碼,你可以看到它)例如http://goo.gl/mmyLQU – xanatos 2015-03-31 09:54:05
另一種替代方案是通過統一
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。
大多數程序員在變量名稱的開頭使用下劃線'_',或者如果它是保留字,例如
public class _class
{
}
變量聲明例如
int _int;
但是,然後根據OP的訪問者的要求,類名是「_class」而不是「class」。 – 2016-01-02 10:50:48
你類應該具有大寫名稱'Class'反正。 – 2015-03-31 09:49:13
添加到亞歷克斯的好評 - _ [DO名**類**和名詞或名詞短語結構,使用** PascalCasing **。](https://msdn.microsoft.com/zh-cn/library/ms229040 %28V = vs.110%29。aspx)_ – MickyD 2015-03-31 09:51:41