0

これは私の問題です (ここで我慢してください)。

次の基本クラスとインターフェースがあります

public abstract class Entity 
{
    public Entity()
    {
    }
}

public interface IRelatable<T> where T : Entity
{
    T RelatedEntity { get; set; }

    void RelateTo()
}

Entity から継承する 2 つのクラスがあります。

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();
    }
}
4

2 に答える 2

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);
于 2012-04-19T13:36:29.983 に答える
0

次のようなことができます。

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

ただし、エンティティ間の関係を表すには、より単純なモデルを使用することをお勧めします。

于 2012-04-18T11:36:17.083 に答える