我知道这可能不值得,但只是出于教育目的,我想知道是否有办法将您自己的关键字注入 .NET 语言。
例如,我认为在 C# 中有 C++ asm 关键字很好。
请记住,我不是在谈论如何实现 asm 关键字,而是在 C# 中添加关键字的一般方法。
我想象的代码:
asm{
mov ax,1
add ax,4
}
那么有没有办法做到这一点?
涵盖实施的答案keyword{ }
足以解决这个问题。
我知道这可能不值得,但只是出于教育目的,我想知道是否有办法将您自己的关键字注入 .NET 语言。
例如,我认为在 C# 中有 C++ asm 关键字很好。
请记住,我不是在谈论如何实现 asm 关键字,而是在 C# 中添加关键字的一般方法。
我想象的代码:
asm{
mov ax,1
add ax,4
}
那么有没有办法做到这一点?
涵盖实施的答案keyword{ }
足以解决这个问题。
目前这是不可能的。然而,微软正在开发一个名为Roslyn的项目,可以概括为“编译器即服务”。除其他外,它还允许您通过 API 扩展或修改编译器的行为。
当 Roslyn 可用时,我相信这应该是可行的(小心!)。
不幸的是,这是不可能的。您不能以任何方式扩展或更改语言。
您可以以某种晦涩的方式使用 PostSharp 读取和解析字符串,并在编译时将它们转换为自定义代码(预处理器)。但是你不会对此很满意,因为它很容易出错,而且你不会为你的魔术字符串获得任何类型的智能感知或代码完成。
在将代码发送到 C# 编译器之前,您可以使用任何您想要预处理代码的工具。例如,您可以使用 VS 宏来进行预处理,将您发明的给定语法映射成可以编译成 C# 代码的东西,如果出现问题,可能会生成错误。如果 VS 宏对您来说功能不够强大,那么您始终可以使用自己的 IDE,该 IDE 在将文本发送到编译器之前对文本执行任何代码操作。
编译器中没有内置支持来指定您自己的关键字/语法;您需要完全独立于编译器来处理它。
根据MSDN ,关键字是预定义的,不能更改。所以你不能添加任何东西,因为你需要告诉编译器如何处理它们。就目前而言,不,你不能。