前提・実現したいこと
C#のジェネリックについてですが、
以下のようなクラスがあるとすると、
DataModel.cs
C#
1class DataModel<Support> where Support : BaseDataSupport 2{ 3}
BaseDataSupport.cs
C#
1///DataModelクラスの動作するために必要な情報やその情報を加工するクラス 2class BaseDataSupport 3{ 4}
DataManager.cs
C#
1///DataModelのデータを操作したり、データを用いて何かをするクラス 2abstract class DataManager<D> where D : DataModel<BaseDataSupport> 3{ 4 D _data; 5}
このようなクラスの関係を用いて
プログラムを作成するにあたり、
上記のように
DataManagerクラスは
where制約でBaseDataSupportを型パラメーターに持つジェネリッククラス
DataModelクラスで制約した型パラメーターDを持つのですが、
DataModelですでにBaseDataSupportで型制約しているにも関わらず、
DataManagerでDataModelの制約
where : BaseDataSupport
と再び記述しなければなりません。
DataModelで制約している時点で、
その型パラメータはBaseDataSupport(またはBaseDataSupportを継承しているクラス)
に決まっているので
必要がない場合それらをDataManagerで記述したくないのですが、
それらの記述を簡略化する方法
または記述しなくていい方法はありませんでしょうか?
このようなサイトでの質問もまだ慣れておらず、情報不足ありましたら
ご指摘ください。
宜しくお願い致します。
実現したいこと
※以下全てそのまま試しましたが、使用できなかった理想例
・型名だけで指定できる
C#
1abstract class DataManager<D> where D : DataModel 2{ 3 D _data; 4}
エラーメッセージ:
エラー CS0305 ジェネリック 種類 'DataModel<Support>' を使用するには、1 型引数が必要です。
・型パラメーターを省略できる
省略した場合、制約で指定した型(上記だとBaseDataSupport)
を使用してくれる
・型パラメーターを短く1か所に定義して使える
using where S : KataParameterTest.BaseDataSupport;
のような感じで変数やusingみたいに定義してそれを使用できるようにできるなど
補足情報(FW/ツールのバージョンなど)
・OS バージョン Windows10
・継承を用いたクラス作成で別の疑問が発生したが、
当疑問などの理由によりそちらも未解決
https://teratail.com/questions/292687
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/08 04:40
2020/10/08 06:21 編集
2020/10/08 07:08 編集