2012-04-18 87 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

相關問題