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
...