让我忘记为什么我需要这个。我们可以创建名称为“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