C# 从泛型类创建实例?

C# 从泛型类创建实例?,c#,reflection,C#,Reflection,我有以下课程: public abstract class Repository<TEntity, TIdentifier> : IRepository<TEntity, TIdentifier> where TEntity : class { --- } public abstract class BaseBusinessObject<TEntity, TIdentifier> : Repository<TEntity, TIdentifier>

我有以下课程:

public abstract class Repository<TEntity, TIdentifier> : IRepository<TEntity, TIdentifier> where TEntity : class
{ --- }

public abstract class BaseBusinessObject<TEntity, TIdentifier> : Repository<TEntity, TIdentifier> where TEntity : class
    { --- }

public class AttachmentBusinessObject : BaseBusinessObject<Attachment, long>
    { --- }
公共抽象类存储库:IRepository其中tenty:class
{ --- }
公共抽象类BaseBusinessObject:存储库,其中tenty:类
{ --- }
公共类AttachmentBusinessObject:BaseBusinessObject
{ --- }
在某些地方,我仅有的东西是字符串中的“AttachmentBusinessObject”和字符串中的“Attachment”


如何创建
BaseBusinessObject
AttachmentBusinessObject
的实例?

您可以使用以下方法执行此操作:


我不确定我是否正确理解了你的意思,但你可能想退房

大概是这样的:

var yourObject
    = Activator.CreateInstance(null, "AttachmentBusinessObject").Unwrap();
但是,如果要传递对象,这不是很有用,因为
CreateInstance
不知道类型可能是什么,所以它只返回一个
对象

一种解决方法是,任何要创建实例的类都可以实现一个公共接口。所以你可能会得到这样的结果:

IBusinessObject yourObject
    = (IBusinessObject)Activator.CreateInstance(null, "AttachmentBusinessObject").Unwrap();
另一个选项是使用上面的第一行代码,然后在if/else语句中测试正确的类类型:

Type objType = yourObject.GetType();

if (objType == typeof(AttachmentBusinessObject))
{
    var myAttachBusObject = (AttachmentBusinessObject)yourObject;
    ...
}
else
    ...

BaseBusinessObject
是一个抽象类,您无法实例化它。@Jeroenvanevel:那么,我们如何从
AttachmentBusinessObject
创建实例?@Mohammad:使用反射?通过
激活器
。更多信息请参见重复问题。我们可以将
yourObject
转换为
BaseBusinessObject
,如果可以,如何转换?我必须将
yourObject
转换为
BaseBusinessObject
以使用其方法我的项目中有几个
BusinessObject
s类,我必须为每个类编写if语句?e、 g:
ContentBusinessObject
BrandBusinessObject
。。。有更好的方法吗?谢谢您的回答,但是您的解决方案在我的示例中不起作用,因为我必须将b转换为
BaseBusinessObject
,以使用它的方法。我不知道它怎么会对您不起作用。为了清晰起见,我做了一次编辑。如果您还需要什么,请告诉我。我的项目中有几个
BusinessObject
s类,而不是
“派生的”
,我必须为每个类编写if语句吗?e、 g:
ContentBusinessObject
BrandBusinessObject
。。。有更好的办法吗?
Type objType = yourObject.GetType();

if (objType == typeof(AttachmentBusinessObject))
{
    var myAttachBusObject = (AttachmentBusinessObject)yourObject;
    ...
}
else
    ...