【发布时间】:2011-08-23 09:14:05
【问题描述】:
我很想写这样的代码:
class Zebra
{
public lazy int StripeCount
{
get { return ExpensiveCountingMethodThatReallyOnlyNeedsToBeRunOnce(); }
}
}
编辑:为什么?我认为它看起来比:
class Zebra
{
private Lazy<int> _StripeCount;
public Zebra()
{
this._StripeCount = new Lazy(() => ExpensiveCountingMethodThatReallyOnlyNeedsToBeRunOnce());
}
public lazy int StripeCount
{
get { return this._StripeCount.Value; }
}
}
第一次调用该属性时,它会运行 get 块中的代码,然后只返回其中的值。
我的问题:
- 将这种关键字添加到库中会涉及哪些成本?
- 这在什么情况下会出现问题?
- 您觉得这有用吗?
我并没有开始努力将其纳入库的下一个版本,但我很好奇这样的功能应该经过什么样的考虑。
【问题讨论】:
-
框架已经提供了Lazy<T>。关键字值得吗?
-
语言设计师总是更喜欢将功能添加到库中而不是通过语言。
-
@JeffYates:这就是我要问的
-
我正在考虑它会/应该/可以如何与自动属性交互。
-
@David:不一定。多年来,我们一直在尝试在库中添加数据访问功能,并获得了 ADO、DAO、ADO.NET、ODBC 以及其他数据访问技术的完整字母组合,其中没有一个提供一致的接口。这就是激励 LINQ 的原因。通过在语言中进行排序、搜索等,我们为许多不同的底层数据提供者提供了一个通用接口。用语言编写东西很棒,但代价高昂,因此我们希望只为最有价值的功能保留它。
标签: c# properties keyword