懒惰的泛型<t>

时间:2015-09-22 07:37:12

标签: c# generics inheritance

我想了解以下内容。

说我有课:

public sealed class UsageClass<TInstance> : IConsumer<TInstance>
    where TInstance: Lazy<SomeClass>

现在说我要继承lazyclass

public class ImplementationClass : SomeClass

现在我试着做

UsageClass<ImplementationClass> instance = new UsageClass<ImplementationClass>();

我会收到错误。

这给我留下了几个选择:

在Lazy中包装TInstance,我不想这样做。我希望课堂上的对象总是很懒惰。

尝试并使实现类继承Lazy,我认为它不会起作用。那儿童班会不会懒惰?我认为编译器仍会抱怨。

所以我的问题是。在给定上述约束的情况下,如何成功继承Lazy以用于泛型类?

2 个答案:

答案 0 :(得分:2)

您不能这样做,因为它无法继承SomeClassTInstance被静态定义为Lazy<SomeClass>,而不是Lazy<ImplementationClass>。那里没有通用。您必须调整UsageClass以使Lazy使用泛型类型而不是静态类型(感谢Dennis_E提供正确的指针):

public class UsageClass<TInstance> : IConsumer<Lazy<TInstance>>
                                     where TInstance : SomeClass

然后你可以像这样实例化它:

UsageClass<ImplementationClass> instance = new UsageClass<ImplementationClass>();

答案 1 :(得分:0)

对于那些感兴趣的人,我解决了我的问题,而不是让我的类Lazy,而是将界面内的所有方法属性标记为lazy。通过这种方式,我仍然可以制作T项,并在链条上进行惰性实例化。