2011-10-17 7 views
2

私のC#プロジェクトでは、2つの抽象ジェネリック親クラスがあり、継承する複数の子クラスがあります。問題は、親のジェネリックに子タイプを渡していることと、愚かな見た目のクラスとメソッドの定義を作ることです。抽象的な汎用親クラスは自動的に子(拡張)型を取得できますか?

ジェネリック親クラスに継承しているクラスの型を取得する方法はありますか?したがって、DTOBaseの型を渡す代わりに、DTOBaseの最初の子の型に宣言します。

親クラス定義

public abstract class DTOBase<T> : INotifyPropertyChanged, IMergeable<T> 

public abstract class ModelBase<T,U> : INotifyPropertyChanged, ITrackable, IMergeable<U> 
    where T : DTOBase<T> 
    where U : ModelBase<T,U> 

あなたは簡単に他の方法で表現することができないタイプの関係を持っている場合

public class MenuGroup : DTOBase<MenuGroup> 

public class MenuGroup : ModelBase<DTOs.MenuGroup, MenuGroup> 
+0

なぜ継承クラスの型が必要ですか? – svick

+0

最初の例のDTOBaseでは、IMergeableインターフェイス定義の継承クラスの型が必要です。 –

答えて

3

いや、そういったことが合理的に共通である例子クラス。

public interface IMessage<TMessage, TBuilder> 
    : IMessage<TMessage>, IMessageLite<TMessage, TBuilder> 
    where TMessage : IMessage<TMessage, TBuilder> 
    where TBuilder : IBuilder<TMessage, TBuilder> 

それは迷惑と醜いですが、それは仕事を取得します。私は私のプロトコルバッファポートで同様の何かを持っています。申し訳ありませんあなたのために良いニュースを持っていない。

+0

ダーン。コンパイラはコンパイル時に型の関係を明示的に知らせることなく把握できなければならないと思うので、それはイライラしています。 –

+0

@ MalcolmO'Hare:それは*コンパイラ*の問題ではありません。タイプシステムは関係を表現するのに十分な富がありません。 –

関連する問題