我想了解以下内容。
说我有课:
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以用于泛型类?
答案 0 :(得分:2)
您不能这样做,因为它无法继承SomeClass
。 TInstance
被静态定义为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项,并在链条上进行惰性实例化。