前提・実現したいこと
C#のジェネリックについてですが、
以下のように、
Modelクラスとそれを保持するクラスのModelUserクラス
を定義しました。
C#
1 public class ModelUser1<Model> : IModelUser<Model> 2 where Model : Model1, new() 3 { } 4 5 public class Model1 : IModel { } 6 7 public interface IModelUser<out Model> where Model : IModel { } 8 public interface IModel { }
これらを用いて継承を繰り返して
新たなクラスを作成し続けたいと考えております。
C#
1 public class ModelUser2<Model> : ModelUser1<Model> 2 where Model : Model2, new() 3 { } 4 public class Model2 : Model1 { } 5 6 7 public class ModelUser3<Model> : ModelUser2<Model> 8 where Model : Model3, new() 9 { } 10 public class Model3 : Model2 { } 11 12 13 public class ModelUser4 : ModelUser3<Model4> { } 14 public class Model4 : Model3 { } 15
ここで、ある段階で
Modelクラスに専用のOptionクラスが必要になり、
それらも同様に実装しようと考え以下のように作成しました。
C#
1 public class ModelUser2<Model> : ModelUser1<Model> 2 where Model : Model2<Option2>, new() 3 { } 4 public class Model2<Option> : Model1, IHaveOption<Option> 5 where Option : Option1 6 { } 7 public class Option2 : Option1 { } 8 public class Option1 : IOption { } 9 public interface IHaveOption<out Option> where Option : IOption { } 10 public interface IOption { } 11 12 public class ModelUser3<Model> : ModelUser2<Model> 13 where Model : Model3, new() 14 { } 15 public class Model3 : Model2<Option3> { } 16 public class Option3 : Option2 { } 17 18 public class ModelUser4 : ModelUser3<Model4> { } 19 public class Model4 : Model3 { }
上記のように作成したところ
ModelUser3で
エラー CS0311
型 'Model'
はジェネリック型またはメソッド 'ModelUser2<Model>' 内で型パラメーター 'Model' として使用できません。
'Model'
から
'Test_UWP.Test.Model2<Test_UWP.Test.Option2>' への暗黙的な参照変換がありません。
とエラーメッセージが表示されてしまいます。
おそらく共変性の定義場所が間違ってるのだと考えているのですが、
どこが違うのかがわかりません
上記のように
共変性を利用したジェネリックの型パラメーターが共変性を利用したジェネリックで定義したい場合
どのようにすればよろしいでしょうか?
このようなサイトでの質問もまだ慣れておらず、情報不足ありましたら
ご指摘ください。
宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
・OS バージョン Windows10
回答1件
あなたの回答
tips
プレビュー