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

标签 c# reflection

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

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

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

最佳答案

These classes all require a default constructor but I don't want to have to riddle all of these classes with a default constructor



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

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

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

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

关于c# - 为程序集中的现有类定义默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12632053/

相关文章:

c# - 如何将 gridview 数据绑定(bind)到 ExpandoObject

c# - HTTP PATCH 方法 C#

c# - 将文本输入与 MySQL 中的散列值匹配

java - 通过 Java 反射的构造函数参数

java - 按属性对集合进行排序,以字符串形式给出

c# - 使用 Intellisense 和编译时检查提取属性名称以进行反射

c# - 使用 LINQ 查询我的 XML 时仍然有问题

c# - 解释下面程序的输出?

java - 使用变量作为对象名调用对象方法

c# - 无法通过反射访问内部属性