C# 具有Lazy的泛型<;T>;

C# 具有Lazy的泛型<;T>;,c#,generics,inheritance,C#,Generics,Inheritance,我试图理解以下内容 假设我有一门课: public sealed class UsageClass<TInstance> : IConsumer<TInstance> where TInstance: Lazy<SomeClass> 现在当我试着去做 UsageClass<ImplementationClass> instance = new UsageClass<ImplementationClass>(); UsageC

我试图理解以下内容

假设我有一门课:

public sealed class UsageClass<TInstance> : IConsumer<TInstance>
    where TInstance: Lazy<SomeClass>
现在当我试着去做

UsageClass<ImplementationClass> instance = new UsageClass<ImplementationClass>();
UsageClass实例=新UsageClass();
我会得到一个错误

这给我留下了两个选择:

用懒洋洋地包装罐头,这是我不想做的。我希望类中的对象总是懒惰的

尝试并使实现类继承惰性,我认为这是行不通的。那么孩子们会懒惰吗?我认为编译器仍然会抱怨


所以我的问题是。鉴于上述约束,如何成功继承Lazy以用于泛型类?

您不能这样做,因为它不能继承
SomeClass
t状态
静态定义为
Lazy
,而不是
Lazy
。没有通用的。您必须调整
UsageClass
以使
Lazy
使用泛型类型而不是静态类型(感谢您提供了正确的指针):

public类用法class:IConsumer
什么地方:某个班级
然后您可以这样实例化它:

UsageClass<ImplementationClass> instance = new UsageClass<ImplementationClass>();
UsageClass实例=新UsageClass();

对于那些感兴趣的人,我解决了我的问题,我没有让我的类变懒,而是将接口中的所有方法属性都标记为懒。这样,我仍然可以使T的项和链中的惰性实例化。

从设计的角度来看,我认为懒惰实例化是调用方的问题。我假设在这种情况下,您试图从泛型内部调用
Lazy
方法,但您必须这样做吗?可能
公共密封类用法class:IConsumer where TInstance:SomeClass
?嗨,是的,由于设计决策是这些对象总是占用大量资源,因此我希望基类强制SomeClass对象始终是惰性的,因此从SomeClass继承的任何对象都将是惰性的。两次使用相同的类型名称会让人感觉很不舒服。有没有办法避免这种情况?
public class UsageClass<TInstance> : IConsumer<Lazy<TInstance>>
                                     where TInstance : SomeClass
UsageClass<ImplementationClass> instance = new UsageClass<ImplementationClass>();