想象一下,我有一个指定一些集合处理程序的接口:
interface ICollectionHandler<T> where T : new() { ... }
然后我有了另一个想要一个集合处理程序的类,它将用于各种类型,所以我想做类似的事情:
class SomeClass<T> where T : ICollectionHandler<> ...
如果我这样做,我会收到错误,说“缺少类型参数”。
那么是否有一种方法可以指定T是泛型类型,可以在运行时指定自己的类型参数,还是我将C#推到其(可能是合理的)边界之外?
答案 0 :(得分: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 { }
但这实际上取决于你将如何使用它以及在什么情况下。也许你可以提供更多细节?
答案 1 :(得分:3)
您可以为ICollectionHandler<T>
创建基本界面并对其进行约束。
interface ICollectionHandler { ... }
interface ICollectionHandler<T> : ICollectionHandler where T : new() { ... }
class SomeClass<T> where T : ICollectionHandler { ... }
或者向SomeClass
添加一个参数,表示应该传递给ICollectionHandler<T>
约束的Type:
class SomeClass<T, U> where T : ICollectionHandler<U> { ... }
答案 2 :(得分:2)
您可以向SomeClass
添加第二个类型参数:
class SomeClass<T, U> where T : ICollectionHandler<U> ...