【发布时间】:2014-08-06 14:16:34
【问题描述】:
我正在尝试创建一个简单的对象回收类
public class ObjectPool<T> where T : class, IRecyclable, new()
{
}
我希望能够在我的界面中使用它:
public interface ISomeInterface : IRecyclable
{
}
ObjectPool<ISomeInterface> pool = new ObjectPool<ISomeInterface>();
但这会产生错误:
error CS0310: The type `ISomeInterface' must have a public parameterless constructor in order to use it as parameter `T' in the generic type or method `ObjectPool<T>'
根据我在网上阅读的内容,我知道我无法在接口中指定构造函数。
我了解到您可以使用反射而不是“new”来创建新实例,但我担心执行此实例化的速度。
解决这种情况的正确方法是什么?有没有我完全忽略的更简单的解决方案?
【问题讨论】:
-
如果你使用
class和new,你必须给它一个具体的类型 -
即使你解决了这个问题,你想如何使用反射来实例化一个接口的实例?
-
根据您的尝试,我想如果您喜欢
public class ObjectPool<T> where T : IRecyclable;这样就好了。 -
我不相信你真的想要这里的“new()”约束。创建新的
ObjectPool<ISomeInterface>不需要新的约束。
标签: c# generics interface constructor constraints