有没有办法为给定程序集中的所有类定义默认构造函数。例如,我在程序集中有这样的类 -
public class SomeClass
{
public SomeClass(int x, int y)
{
}
}
这些类都需要一个默认构造函数,但我不想用默认构造函数来混淆所有这些类,那么我该如何使用反射或类似的东西来做到这一点?(也许是 TypeBuilder.DefineDefaultConstructor?)
有没有办法为给定程序集中的所有类定义默认构造函数。例如,我在程序集中有这样的类 -
public class SomeClass
{
public SomeClass(int x, int y)
{
}
}
这些类都需要一个默认构造函数,但我不想用默认构造函数来混淆所有这些类,那么我该如何使用反射或类似的东西来做到这一点?(也许是 TypeBuilder.DefineDefaultConstructor?)
这些类都需要一个默认构造函数,但我不想用默认构造函数来混淆所有这些类
如果类需要构造函数,则应包含它。就维护而言,其他任何事情都将是一场噩梦。
自动生成构造函数的主要问题是默认构造函数需要了解相关类,因为它需要正确初始化类的值。在您的示例中,您的默认构造函数需要做一些事情x
来设置通常使用and创建的内部状态y
。如果不了解类,就无法知道该东西应该是什么,因此应该定义类。
话虽如此,没有直接的方法可以“将构造函数添加到每种类型”。您可能会使用像Cecil这样的工具来用您的修改重写程序集 - 基本上,加载程序集,检查每种类型,添加新信息,然后重写它。或者,您可以使用某种形式的 AOP 工具,例如PostSharp,在编译时基于某些属性或类似属性创建构造函数。
但是,我建议不要使用这些方法。我认为修改代码本身并在适当的时候包含构造函数是正确的方法。
您不能在运行时更改已编译的类以添加默认构造函数。
您可以在编译时使用面向方面的编程来完成。查看PostSharp。