为程序集中的现有类定义默认构造函数

时间:2012-09-28 00:37:51

标签: c# reflection

有没有办法为给定程序集中的所有类定义默认构造函数。例如,我在程序集中有这样的类 -

public class SomeClass
{
    public SomeClass(int x, int y)
    {
    }
}

这些类都需要一个默认的构造函数,但是我不想用默认的构造函数来解释所有这些类,所以如何使用反射或类似的东西来做? (也许是TypeBuilder.DefineDefaultConstructor?)

2 个答案:

答案 0 :(得分:3)

  

这些类都需要默认构造函数,但我不想用默认构造函数来谜语所有这些类

如果类需要构造函数,则应包含它。在维护方面,任何其他事情都将是一场噩梦。

自动生成构造函数的主要问题是默认构造函数需要知道有问题的类,因为它需要正确初始化类的值。在您的示例中,您的默认构造函数需要执行 something 来设置通常使用xy创建的内部状态。没有类知识就无法知道应该是什么东西,所以类是应该定义的地方。

话虽如此,但没有一种直接的方法可以“为每种类型添加构造函数”。您可以使用像Cecil这样的工具来重写您的修改程序集 - 基本上,加载程序集,检查每种类型,添加新信息,然后重写它。或者,您可以使用某种形式的AOP工具(如PostSharp)在编译时根据某些属性或类似属性创建构造函数。

但是,我建议不要采用这些方法。我认为修改代码本身并在适当的时候包含构造函数 是正确的方法。

答案 1 :(得分:0)

您无法在运行时更改已编译的类以添加默认构造函数。

你可以在编译时使用面向方面编程来完成它。查看PostSharp