当前位置:  开发笔记 > 编程语言 > 正文

元编程是否可以在C#中实现?

如何解决《元编程是否可以在C#中实现?》经验,为你挑选了5个好方法。

特别是,是否可以在c#中编译时执行类似于此c ++代码的代码

template 
struct Factorial 
{
    enum { value = N * Factorial::value };
};

template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1
}

Jacob Krall.. 31

不,C#语言不直接支持这种复杂性的元编程.但是,像@littlegeek所说,Visual Studio附带的文本模板转换工具包将允许您实现任何复杂性的代码生成.



1> Jacob Krall..:

不,C#语言不直接支持这种复杂性的元编程.但是,像@littlegeek所说,Visual Studio附带的文本模板转换工具包将允许您实现任何复杂性的代码生成.


@StanislavProkop我删除了断开的链接并将Scott Hanselman的文章提升为主要文章.

2> Jon Harrop..:

在.NET中可以进行元编程(参见编译器编译器,正则表达式,代码DOM,反射等),但C#不能进行模板元编程,因为它没有该语言功能.


+1用于简要而全面地回答问题的各个方面.

3> Ira Baxter..:

大多数人坚持尝试从他们喜欢的语言内部进行元编程.如果语言不能很好地支持元编程,那就行不通; 其他答案都观察到C#没有.

解决这个问题的方法是使用程序转换工具从语言 外部进行元编程.这些工具可以解析源代码,并对其进行任意转换(这就是元编程所做的事情),然后吐出修改后的程序.

如果您有一个可以解析任意语言的通用程序转换系统,那么您可以使用您喜欢的任何语言进行元编程.请参阅我们针对此类工具的DMS软件重新设计工具包,它具有适用于C,C++,Java,C#,COBOL,PHP和许多其他编程语言的强大前端,并已用于所有这些的元编程.

DMS之所以成功,是因为它提供了一个常规的方法和支持基础设施,可以完全访问作为AST的程序结构,并且在大多数情况下还提供了额外的数据,如符号表,类型信息,控制和数据流分析,这些都是进行复杂程序操作所必需的.

编辑(回应评论):可以应用DMS来实现OP在C#上的任务.


-1:答案很好,但它没有回答这个问题.

4> 小智..:

在讨论处理Java或.Net语言时的编译时,你必须小心.在这些语言中,你可以执行比C++更强大的元编程(在更广泛的意义上 - 反射 - ),因为"编译时间"(JIT)可以在"运行时间"之后被推迟;)



5> Brian..:

不,C#中不可能进行元编程.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有