让我们忘记为什么需要这个。
我们可以创建一个名为“class”的类。
下面的代码导致编译错误,因为class是一个保留关键字。
public class class
{
}
那么有什么黑客或方法可以欺骗C#编译器吗? :)
面试官在上次采访中询问了这个问题,他告诉我这是可能的。
答案 0 :(得分:21)
您可以使用:
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
的其他代码。
答案 1 :(得分:8)
另一种选择是通过Unicode
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。
答案 2 :(得分:-3)
大多数程序员在变量名称的开头使用下划线'_',或者如果它是保留字,例如。
public class _class
{
}
变量声明示例
int _int;