2つの部分インターフェースを作成する必要があります。制約付きワンなど、なしその他:タイプ制約付きの部分汎用インターフェース
public class CuteInterfaceImplementationBase
{
public static IMyCuteInterface<T> From<T>(T t)
{
return new CuteInterfaceImplementation<T>(t);
}
}
と、この:これは、静的より動的にこれを取得するためのメソッドである
public class CuteInterfaceImplementation<T> : IMyCuteInterface<T>
{
private readonly T _element;
public CuteInterfaceImplementation(T element)
{
_element = element;
}
public void DoSomethingOnlyPossibleIfGenericIsIEnumerable(){}
public void DoSomeStuff(){}
public void DoSomeStuff2() { }
}
:
public partial interface IMyCuteInterface<T> where T : IEnumerable
{
void DoSomethingOnlyPossibleIfGenericIsIEnumerable();
}
public partial interface IMyCuteInterface<T>
{
void DoSomeStuff();
void DoSomeStuff2();
}
これは実装です私がそれを呼んでいる方法です:
したがって、私はCuteInterfaceImplementationBase.From<T>
とCuteInterfaceImplementation<T>
-classに最初のインターフェイスで追加したジェネリック型制約を追加したいと考えています。
達成したいことは次のとおりです。args
は、タイプList<T>
またはタイプint
またはそれ以外のもの。私の目標は、args
がタイプIEnumerable<T>
からのものである場合、私はCuteInterfaceImplementation
-instanceにもっと多くの関数を(制約付きのインターフェイスを介して)追加したいと思います。
例:引数タイプIEnumerable
からのものである場合
、CuteInterfaceImplementation
から、このインスタンスが持つメソッド:
void DoSomethingOnlyPossibleIfGenericIsIEnumerable();
void DoSomeStuff();
void DoSomeStuff2();
引数がある場合タイプFoo
またはint
(またはIEnumerable
を実装していない任意の型)私はメソッドを使用することができますから:
void DoSomeStuff();
void DoSomeStuff2();
手段、DoSomethingOnlyPossibleIfGenericIsIEnumerable
は使用できません。
私は実装されたクラスに制約を追加する必要があるので、これは不可能です。どのようにこれを行うにはどのようなアイデア?
を使用して、私は 'partial'の目的は、あなたが望むものの定義を分割しないことだと思いことを回避することができます。 – dcg
あなたのクラスにDoSomethingOnlyPossibleIfGenericIsIEnumerableが含まれていればジェネリックはIEnumerableでなければなりません。あなたは他のタイプでそのクラスを使うことができません。(ここで 'partial'は無関係です。 – Evk
申し訳ありません@エバーク、しかし私は部分的に何をしているのか分かります。あなたのコメントは私が言っていたことをちょうど繰り返すだけです。はい、できません。私の質問は、私が記事で説明したことをどのように働かせることができるかということでした。 –