5

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

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

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

4

2 回答 2

3

这些类都需要一个默认构造函数,但我不想用默认构造函数来混淆所有这些类

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

自动生成构造函数的主要问题是默认构造函数需要了解相关类,因为它需要正确初始化类的值。在您的示例中,您的默认构造函数需要做一些事情x来设置通常使用and创建的内部状态y。如果不了解类,就无法知道该东西应该是什么,因此应该定义类。

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

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

于 2012-09-28T00:42:52.977 回答
0

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

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

于 2012-09-28T00:43:08.277 回答