2012-04-18 7 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.、 をありがとうあなたの答えをいただき、ありがとうございます。あなたはこのような何かを行うことができます

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; 
     // ...   
    } 
} 

タイプは、引数の型から推測されます。

SomeClass someClass = new SomeClass(); 
E2 e2 = new E2() { RelatedEntity = new E1() }; 
s.DoSomething(e2); 
0

を:: B.問題は、私はこのような非ジェネリッククラスからRelatedEntityにアクセスしたいということです

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

私は単純なモデルを使用することをお勧めしますが、エンティティ間の関係を表現する。 Tの

+0

A.をごいただき、ありがとうございます回答。 B.問題は、私は、このような非ジェネリッククラスからRelatedEntityにアクセスしたいということです。 'パブリッククラス工ass { ます。public void doSomethingの(IRelatable <> REL) { rel.RelateTo(); } } ' –

関連する問題