私は必要なものに対して洗練されたソリューションを持っていますが、それを置き換えるための洗練されたソリューションを探しています。C#で一般的に継承される型の制限
次のコードはコンパイルが、私がやりたいものを表していません:
interface IWebService
{
}
abstract class BaseClient<T>
{
}
class SpecializedClient : BaseClient<IWebService>
{
}
class ClientHelper<T> where T : BaseClient<*>
{
}
ClientHelper<T>
でT
にかかわらず、渡されたテンプレートタイプのBaseClient
を拡張するすべてのクラスである場合は
無粋ソリューションは以下のとおりです。
class ClientHelper<T, U> where T : BaseClient<U> {}
これは無粋になった理由は、私のprojeですctは次のようなクラスに終わります。
class MyClass<A, B, C, D, E, F, G> where A : MyBaseClass<B, C, D, E, F, G>
1つのタイプを取る基本クラスに至るまでです。これは単にジェネリッククラスの複雑な継承ツリーを持つコストですか、テンプレート化された型の型制限を保持しながらこれを行う簡単な方法ですか?
私のクラスの中には単に内部的に使う 'T'を公開していないものもあるので、インタフェースはその一部で動作するかもしれません。私はそれが扱いにくくなってきているので、私が得ることができる任意の単純化を取るでしょう。 – Foran
'クラス'を 'T 'が公開されることのないすべてのケースを単純化しました。シンプルだけど、それほど明白ではありませんでした。 :-)それは転送される必要があるタイプのおよそ半分を切り捨てます。 –
Foran
Cool。うれしいことはあなたのために働いた。また、タイプに依存しない与えられた 'T'(メソッド、プロパティ、イベント、フィールド)に対して、***オペレーション***をすべて一般化することができれば、いくつかの追加の汎用パラメータを削除することもできます。 –