2012-04-18 97 views
0

这是我的问题(请在这里耐心等待)。如何在不知道具体类型的情况下获得通用接口?

我有以下的基类和接口

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,像这样的RelatedEntity:

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

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

谢谢 欧米


A.谢谢您的回答。 B.问题是,我想从一个非通用类访问RelatedEntity这样的:

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

回答

0

如果你想从非通用类访问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); 
0

你可以做这样的事情:

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

虽然我会建议使用一个简单的模型代表实体之间的关系。

+0

A.感谢您回答。 B.问题是,我想从一个非通用类这样访问RelatedEntity: '公共类SomeClass的 { 公共无效的doSomething(IRelatable <> REL) { rel.RelateTo(); } }' – 2012-04-20 11:04:44

相关问题