C#ジェネリックパラメータに制約を指定できますか?そのパラメータは抽象でなければなりませんか? 私は現在、ジェネリックパラメータにパラメータのないコンストラクタが必要なメソッドを持っていますが、抽象的なTが必要なシナリオを実行していますので、抽象的なTsを受け入れるメソッドでオーバーロードすることを望んでいました。ジェネリックパラメータを抽象的に制約する
public static void SomeMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, new()
{
T tThing = new T();
//do something simple
}
public static T SomeOtherMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, new()
{
T tThing = new T();
//do something simple
}
public static void SomeMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, abstract()
{
//do something clever
}
public static T SomeOtherMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, abstract()
{
//do something clever
}
答えが「あなたができない」と思われる場合は、賢明な回避策がありますか?
何の抽象ための制約はありません - あなたは、あなたが抽象的制約が必要だと思うことを何をしたいのか、その明確ではないが。あなたは抽象クラス(例えば、あなたのコードの 'SomeBase')であるクラスに制約することができます。 – Jamiec
値または参照型があるかどうかを判断するためにnew-constraintが存在します。しかし、私は抽象的な制約のための実用的な使用を見ることができません。 'IEnumerable'のメリットとして、 'IEnumerable 'も持っていないことを望みますか? –
HimBromBeere
* SomeBase *を新しい抽象クラスに継承してから*を使用するとどうなりますか?T:NewAbstractClass *? – bit