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表示应该传递给ICollectionHandler<T>约束的类型:

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

您可以将第二个类型参数添加到SomeClass

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