【问题标题】:Is it possible to add keyword to C# or VB.NET?是否可以向 C# 或 VB.NET 添加关键字?
【发布时间】:2025-12-27 17:50:10
【问题描述】:

我知道这可能不值得,但只是出于教育目的,我想知道是否有办法将您自己的关键字注入 .NET 语言。

例如,我认为在 C# 中使用 C++ asm 关键字很好。
请记住,我不是在谈论如何实现 asm 关键字,而是在 C# 中添加关键字的一般方法。

我想象的代码:

asm{
    mov ax,1
    add ax,4
}

那么有没有办法做到这一点?
涵盖实施keyword{ } 的答案足以解决这个问题。

【问题讨论】:

  • 仅当您准备好编写自己的 C# 编译器时。
  • 我知道的唯一方法是将别名分配给已知类型。
  • 我认为这需要一些“中间语言”标签的变体......所有 .NET 都转到 IL 代码
  • @HamletHakobyan 您只需要编写自己的预处理器,仍然很难,但不如编写完整的编译器复杂。 Roslyn 也让这变得容易多了。
  • @makerofthings7 如果您使用的是前处理器而不是后处理器,则不需要。

标签: c# .net vb.net visual-studio language-design


【解决方案1】:

目前这是不可能的。但是,有一个名为 Roslyn 的 Microsoft 正在开发的项目可以概括为“编译器即服务”。除其他外,它还允许您通过 API 扩展或修改编译器的行为。

当 Roslyn 可用时,我相信这应该是(小心!)相当可行的事情。

【讨论】:

  • Roslyn 发布后,现在谁能提供更好(更新)的答案?
【解决方案2】:

您可以使用任何您想要的工具在将代码发送到 C# 编译器之前对其进行预处理。例如,您可以使用 VS 宏进行预处理,将您发明的给定语法映射到 确实 编译成 C# 代码的东西,如果出现问题,可能会生成错误。如果 VS 宏对您来说不够强大,那么您始终可以使用自己的 IDE,它会在将文本发送到编译器之前对文本执行任何编码操作。

编译器没有内置支持来指定您自己的关键字/语法;您需要完全独立于编译器来处理它。

【讨论】:

  • 目前还没有,但很快就会有 - 如果您愿意,Roslyn 将允许您修改编译器行为。到目前为止我看到的样本是……嗯,非常可怕,主要是! ;-)
  • 自 VS 2012 以来宏被淘汰是多么可悲
  • @Apocatastasis 好吧,您可以使用插件或其他形式的扩展,即使它与宏的风格不同。
【解决方案3】:

很遗憾,这是不可能的。您不能以任何方式扩展或更改语言。

您可以以某种晦涩的方式使用 PostSharp 读取和解析字符串,并在编译时将它们转换为自定义代码(预处理器)。但是您不会对此感到非常满意,因为它很容易出错,而且您不会为您的魔术字符串获得任何类型的智能感知或代码完成。

【讨论】:

    【解决方案4】:

    根据MSDN,关键字是预定义的,不能更改。所以你不能添加任何东西,因为你需要告诉编译器如何处理它们。就目前而言,不,你不能。

    【讨论】:

      最近更新 更多