C# 是否已初始化字段,并更改了ctor参数?
这是惰性初始化字段的语法C# 是否已初始化字段,并更改了ctor参数?,c#,.net,.net-4.0,lazy-initialization,C#,.net,.net 4.0,Lazy Initialization,这是惰性初始化字段的语法 public class MyClass { string _cat; public MyClass(string Category) { _cat=Category; } MyExpensive _expensive; public MyExpensive Expensive { get { LazyInitializer.EnsureI
public class MyClass
{
string _cat;
public MyClass(string Category)
{
_cat=Category;
}
MyExpensive _expensive;
public MyExpensive Expensive
{
get
{
LazyInitializer.EnsureInitialized(ref _expensive, () = > new MyExpensive ());
return _expensive;
}
}
}
但是,如果我需要使用运行时参数创建新的MyExpensive,该怎么办?(根据流程逻辑)
我不想创建一个标志字段,然后在中执行大量的IF's
我的意思是,有时候我需要运行newmyexpensive(“图片”)
,有时候newmyexpensive(“鲜花”)
我该怎么做
(不包括为每个类别创建一个惰性字段-如果您要做任何昂贵的事情,您应该使用方法,而不是属性
属性应该是快速且便宜的,因为这是大多数程序员的正常期望(最少惊讶的原则)
在您的情况下,不要使用getter-use:
public MyExpensive GetExpensive()
{
LazyInitializer.EnsureInitialized(ref _expensive, () = > new MyExpensive ());
return _expensive;
}
当然,您有参数化的重载。如何获取字符串值?如果这也是来自调用者,那么如果在第二次调用中得到不同的值,您会期望什么?@JonSkeet只有一个字符串值param(在我的情况下)实际上无法回答我的任何问题,尽管…@JonSkeet我已经编辑了代码。然而,我现在明白了,这是一个愚蠢的问题。因为我可以只做
newmyexpensive(\u cat)
.Oded这里的ctor参数在哪里?@RoyiNamir-您可以有一个重载,它接受一个字符串参数并将其传递给ctor
。请注意上面编辑的代码。这是一个非常愚蠢的问题,因为我本可以这样做,只需使用newmyexpensive(\u cat)