有没有办法在C#中以通用方式表示通用处理程序?

时间:2012-10-16 19:46:54

标签: c#

想象一下,我有一个指定一些集合处理程序的接口:

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

然后我有了另一个想要一个集合处理程序的类,它将用于各种类型,所以我想做类似的事情:

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

如果我这样做,我会收到错误,说“缺少类型参数”。

那么是否有一种方法可以指定T是泛型类型,可以在运行时指定自己的类型参数,还是我将C#推到其(可能是合理的)边界之外?

3 个答案:

答案 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> ...