gpt4 book ai didi

c# - 使用非默认构造函数创建在运行时确定类型的对象

转载 作者:行者123 更新时间:2023-12-02 04:44:05 25 4
gpt4 key购买 nike

我有一个抽象类 A 和实现 B 和 C。我还有一个数据库,用于存储 A 对象的信息。此表有一个名为“名称”的列,用于确定是否应使用数据构建 B 或 C。

public abstract class A { }

public class B,C : A
{
public B,C(TableData data)
{
//Do Stuff.
}
}

public class TableData
{
string Name { get; set; }
}

现在,如果 Name 是“Banana”,我希望它创建一个 B 的实例;如果它是“Carrot”,我希望它创建一个 C:

A myObj = { Reflection? }

其中 Reflection 以某种方式使用 B 或 C 构造函数并将这个新创建的对象分配给 myObj。我已经研究过使用反射,但是那里的大多数允许使用非默认构造函数的方法都非常复杂,并且采用我以前从未使用过的参数:

http://msdn.microsoft.com/en-us/library/System.Activator.CreateInstance(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/dd384354.aspx

有更好的方法吗?如果不是,我如何使用第二个链接动态分配此类型?

如果有一些方法可以简单地做到这一点:

CreateInstance("Namespace.Type", [ ConstructorParam1, ConstructorParam2, ... ])

这就是我所需要的。

最佳答案

如果您希望有一个采用TableData 的参数,那么这很简单:

Type type = Type.GetType(qualifiedName);
TableData tableData = ...
A obj = (A)Activator.CreateInstance(type, tableData);

注意qualifiedName应该包含装配信息;如果没有,您需要先解决这个问题 - 也许:

Type type = typeof(A).Assembly.GetType(fullName);

其中 B/C 等与 A 在同一程序集中,其中 fullName"Namespace.B" 或类似的。

关于c# - 使用非默认构造函数创建在运行时确定类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com