0

エンティティフレームワーククラスによって生成されたクラスで抽象化を試みており、次のような設定をしています:

EntityClassA (Generated)
{
   EntityCollection<EntityClassB> EntityClassBs;
}

EntityClassB (Generated)
{
   (...)
}

Partial EntityClassA : InterfaceA
{
   (...)
}


Partial ClassB : InterfaceB
{
   (...)
}

InterfaceA
{
   IEnumerable<InterfaceB> EntityClassBs;
}

しかし、戻り値の型が EntityClassB で一致しないため、EntityClassA が適切に実装されないという問題が発生し続けています。

更新:申し訳ありませんが、この状態でこの質問を送信するつもりはありませんでした。適切な interfaceA プロパティ名とより詳細な説明を含むように例を更新しました。これは単なる例であり、命名法は実際の名前を表していないことに注意してください。

私がやろうとしているのは、wpf コントロールのクラス ライブラリとデータ用のライブラリがあることです。WPF ライブラリは、カスタム テーブルの作成に使用する 1 つのクラスのデータ ライブラリを参照します。そこで私がやろうとしていたのは、インターフェイスを使用してデータ パッケージを信頼することでした。このように進める方法はありますか、それとももっと推奨される方法はありますか?

私が見ているのは、インターフェイス プロパティのシグネチャを正確に一致させる必要があり、そのようなインターフェイスを実装できないということです。

4

2 に答える 2

1

私はあなたが何をしようとしているのか理解していると思います。おそらく、署名を変更する代わりに (できません)、同じプロパティを返すだけで、探している署名を持つ別のプロパティを追加することができます。

Partial EntityClassA : InterfaceA
{
    IEnumerable<InterfaceB> CollectionEntityClassBs
    {
        get{ return (some cast or somthin)EntityClassBs;  }
    }
}

InterfaceA
{
   IEnumerable<InterfaceB> CollectionEntityClassBs;
}
于 2013-03-05T15:16:56.550 に答える
1

あなたは質問をせず、使用している戻り値の型についての詳細も提供していないため、あなたの声明に基づいて、あなたがこれをやろうとしているふりをします:

Partial EntityClassA : InterfaceA
{
   IEnumerable<ClassB> IClassBs {get; set;}
}

Partial ClassB : InterfaceB
{
   (...)
}

InterfaceA
{
   IEnumerable<InterfaceB> IClassBs;
}

これは無効です。このInterfaceAインターフェースはIClassBsInterfaceBs. のコレクションを返すようにメソッドシグネチャClassBを変更すると、インターフェイスの定義と一致しません。

ClassB戻り値の型を変更せずに s の実際のリストを返すことができることに注意してください。

Partial EntityClassA : InterfaceA
{
   IEnumerable<InterfaceB> IClassBs 
   {
       get
       {
           return new List<InterfaceB>() {new ClassB()};
       }
   }
}
于 2013-03-05T14:41:43.347 に答える