在获取参数方法中创建实例?已知模式或?
Creating instance within get parameter method? known pattern or?
最近我采用了一种方便的方法来确保树状结构成员知道它们的父节点:
private metaCollection<metaPage> _servicePages;
/// <summary>
/// Registry of service pages used by this document
/// </summary>
[Category("metaDocument")]
[DisplayName("servicePages")]
[Description("Registry of service pages used by this document")]
public metaCollection<metaPage> servicePages
{
get
{
if (_servicePages == null) {
_servicePages = new metaCollection<metaPage>();
_servicePages.parent = this;
}
return _servicePages;
}
}
(概念是在 属性 get 方法中为私有字段创建实例)
我很想知道这种模式是否有一些众所周知的名字?
甚至更多:这种做法是否存在已知问题/不良影响?
谢谢!
是的,它叫做惰性初始化。来自 Wikipedia Lazy Loading page 上的示例:
延迟初始化
主要文章:Lazy initialization
使用延迟初始化,要延迟加载的对象最初设置为 null,每次对该对象的请求都会检查是否为 null 并在首先返回它之前创建它 "on the fly",如这个 C# 示例所示:
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get
{
if (myWidget == null)
{
myWidget = Widget.Load(myWidgetID);
}
return myWidget;
}
}
最近我采用了一种方便的方法来确保树状结构成员知道它们的父节点:
private metaCollection<metaPage> _servicePages;
/// <summary>
/// Registry of service pages used by this document
/// </summary>
[Category("metaDocument")]
[DisplayName("servicePages")]
[Description("Registry of service pages used by this document")]
public metaCollection<metaPage> servicePages
{
get
{
if (_servicePages == null) {
_servicePages = new metaCollection<metaPage>();
_servicePages.parent = this;
}
return _servicePages;
}
}
(概念是在 属性 get 方法中为私有字段创建实例)
我很想知道这种模式是否有一些众所周知的名字? 甚至更多:这种做法是否存在已知问题/不良影响?
谢谢!
是的,它叫做惰性初始化。来自 Wikipedia Lazy Loading page 上的示例:
延迟初始化
主要文章:Lazy initialization
使用延迟初始化,要延迟加载的对象最初设置为 null,每次对该对象的请求都会检查是否为 null 并在首先返回它之前创建它 "on the fly",如这个 C# 示例所示:
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get
{
if (myWidget == null)
{
myWidget = Widget.Load(myWidgetID);
}
return myWidget;
}
}