如何在不知道其特定类型的情况下获取通用接口

本文关键字:情况下 获取 接口 类型 不知道 | 更新日期: 2023-09-27 18:31:33

这是我的问题(请耐心等待)。

我有以下基类和接口

public abstract class Entity 
{
    public Entity()
    {
    }
}
public interface IRelatable<T> where T : Entity
{
    T RelatedEntity { get; set; }
    void RelateTo()
}

我有两个从实体继承的类:

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 的相关实体,如下所示:

public void DoReflcetion(Entity ent)
{
   var ent2 = (ent as IRelatable<>).RelatedEntity;
}

任何想法如何做到这一点?

谢谢奥姆里


答:谢谢你的回答。B.问题是我想从这样的非泛型类访问相关实体:

public class SomeClass
{
    public void DoSomething(IRelatable<> rel)
    {
        rel.RelateTo();
    }
}

如何在不知道其特定类型的情况下获取通用接口

如果要从非泛型类访问 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);

你可以做这样的事情:

public class SomeClass<T> where T: Entity
{
    public void DoSomething(IRelatable<T> rel)
    {
        T relatedTo = rel.RelatedEntity;
        // ...
    }
}

尽管我建议使用更简单的模型来表示实体之间的关系。