一般来说,我需要从输入对象中获取它的构造函数和参数列表。最重要的是参数列表。是否有可能实现这样的事情:
Class Prime
{
Type t;
obj[] param;
public void addobj(object obj)
{
t = obj.GetType();
param = obj.GetParameter();
}
public object createobj()
{
return Activators.CreateInstanse(t,param)
}
}
要使 adobj 调用如下所示:
addobj(new Person("Vasya", 17);
方法参数通过堆栈传递,即 在构造函数调用结束时,对传递给它的参数一无所知。有几种方法可以找出传递给构造函数的参数。
缓存
传递给构造函数的参数通常存储在新创建的对象的字段中。借助反射,我们可以删除这些字段。就个人而言,我不推荐这种方法,因为。你必须知道类型的内部结构,因为 由于这些字段通常是私有的,因此有关它们的元数据可能会因版本而异。
在本地保存参数
您可以将参数本地存储在调用构造函数的方法的堆栈中。这是最简单和最安全的方法。
代理类
如果你真的想全局保存参数,而不是从内部打开类,那么你可以使用代理类。
重要的!这是伪代码。您不应将其复制到发布项目中。
在创建类型对象并将其添加
Some到我们预先创建的存储之后,我们可以通过从相应的SomeProxy.因此,我们可以通过非常简单的方式在类本身、外部本地和全局存储中实现构造函数参数的存储。根据自己的情况选择适合自己的方法。
从已知类型的对象中获取构造函数非常容易,但是如果您想从泛型对象中获取构造函数,则必须努力工作。这是我关于第三种方法 -
SomeProxy。可以用这样的类替换它: