3

コレクション ハンドラを指定するインターフェイスがあるとします。

interface ICollectionHandler<T> where T : new() { ... }

次に、さまざまなタイプに使用するコレクションハンドラーを必要とする同じ他のクラスがあるので、次のようなことをしたいと思います。

class SomeClass<T> where T : ICollectionHandler<> ...

ただし、これを行うと、「型引数がありません」というエラーが表示されます。

T がジェネリック型であり、その独自の型引数を実行時に指定できることを指定する方法はありますか、それともここで C# をその (おそらく賢明な) 境界を超えてプッシュしていますか?

4

3 に答える 3

5

次のようなものを試すことができます:

interface ICollectionHandler<T> where T : new() { }

public class MyImplementation<T, U> where T : ICollectionHandler<U> { }

インターフェイスの実装内にどのジェネリック型が存在するかを知る必要があると確信しています。そのサブタイプを気にしない場合:

interface ICollectionHandler { }

public abstract class CollectionHandler<T> : ICollectionHandler where T : new()  { }

public class MyImplementation<T> where T : ICollectionHandler { }

しかし、それは実際にそれをどのように使用するか、どのような状況で使用するかによって異なります. 詳細を教えていただけますか?

于 2012-10-16T19:54:25.273 に答える
3

の基本インターフェイスを作成し、ICollectionHandler<T>それに対して制約することができます。

interface ICollectionHandler { ... }
interface ICollectionHandler<T> : ICollectionHandler where T : new() { ... }
class SomeClass<T> where T : ICollectionHandler { ... }

または、制約SomeClassに渡す必要がある Type を表すパラメーターを追加します。ICollectionHandler<T>

class SomeClass<T, U> where T : ICollectionHandler<U> { ... }
于 2012-10-16T19:52:22.920 に答える
2

2 番目の型パラメーターを に追加できますSomeClass

class SomeClass<T, U> where T : ICollectionHandler<U> ...
于 2012-10-16T19:52:54.073 に答える