[英]How to get a generic interface without knowing its specific type?
这是我的问题(请在这里忍受)。
我有以下基类和接口
public abstract class Entity
{
public Entity()
{
}
}
public interface IRelatable<T> where T : Entity
{
T RelatedEntity { get; set; }
void RelateTo()
}
我有两个从Entity继承的类:
public class E1 : Entity
{
public E1
{
}
}
public class E2 : Entity, IRelatable<E1>
{
public E2
{
}
public E1 RelatedEntity { get; set; }
public void RelateTo()
{
// To some code here ....
}
}
现在,我想获取E2的RelatedEntity,如下所示:
public void DoReflcetion(Entity ent)
{
var ent2 = (ent as IRelatable<>).RelatedEntity;
}
任何想法如何做到这一点?
谢谢Omri
答:谢谢您的回答。 B.问题是我想从这样的非泛型类访问RelatedEntity:
public class SomeClass
{
public void DoSomething(IRelatable<> rel)
{
rel.RelateTo();
}
}
您可以执行以下操作:
public class SomeClass<T> where T: Entity
{
public void DoSomething(IRelatable<T> rel)
{
T relatedTo = rel.RelatedEntity;
// ...
}
}
尽管我建议使用更简单的模型来表示实体之间的关系。
如果要从非泛型类访问RelatedEntity,则创建泛型方法
public class SomeClass
{
public void DoSomething<T>(IRelatable<T> rel)
where T : Entity
{
T relatedTo = rel.RelatedEntity;
// ...
}
}
T的类型将从参数类型推断:
SomeClass someClass = new SomeClass();
E2 e2 = new E2() { RelatedEntity = new E1() };
s.DoSomething(e2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.