在get参数方法中创建实例?已知模式或?

时间:2017-05-08 21:33:35

标签: c# tree parent-child parent getproperty

最近我采用了一种方便的方法来确保树状结构成员知道他们的父节点:

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 方法中为私有字段创建实例)

我很想知道这种模式是否有一些众所周知的名字? 甚至更多:这些做法是否存在已知问题/不良影响?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,它被称为懒惰初始化。来自Wikipedia Lazy Loading page上的示例:

延迟初始化

主要文章:Lazy initialization

使用延迟初始化时,延迟加载的对象最初设置为null,并且对象的每个请求都检查null并在首先返回它之前“动态”创建它,如在此C#示例中所示:

private int myWidgetID;
private Widget myWidget = null;

public Widget MyWidget 
{
    get 
    {
        if (myWidget == null) 
        {
            myWidget = Widget.Load(myWidgetID);
        }    

        return myWidget;
    }
}