我应该避免在 public API 中暴露 Lazy<T> class 吗?

Should I avoid exposing the Lazy<T> class in public API?

在库的 public 接口的设计中,如果我想要延迟初始化,return Lazy<T> 的实例在 属性 中是否合法?还是通过封装或其他技术始终隐藏 Lazy<T> 的用法更好?

对于以下内容,我假设您指的是 Lazy 属性。

这取决于您的界面的用途。

消费者知道自己懒惰是一个重要的细节吗?或者它只是一个不应改变消费者行为的技术细节。

如果你只有一个短暂的延迟,不能由消费者处理,那么我倾向于隐藏 Lazy 并只直接公开 T。

如果消费者应该意识到并可能适应这种行为,那么我会揭露懒惰。

但考虑到这一点,在大多数情况下我宁愿公开一个方法,该方法表明代码可能有副作用或可能需要一段时间。

我看不出有任何理由直接在签名中公开 Lazy<T>。在我的用例中,懒惰是一个实现细节。

如果初始化很长 运行,请不要在 属性 中使用它。在这种情况下,最好提供一种方法,考虑返回 Task<T>.