C# 在get参数方法中创建实例?已知模式还是?
最近,我采用了一种简便的方法来确保树状结构成员了解其父节点:C# 在get参数方法中创建实例?已知模式还是?,c#,tree,parent-child,parent,getproperty,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("R
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;
}
}
其概念是在property get方法中为私有字段创建实例
我想知道这个图案是否有一些共同的名字?
更重要的是:这种做法是否存在已知问题/不良影响
谢谢 是的,它被称为延迟初始化。从上的示例: 延迟初始化 主要条款: 通过延迟初始化,要延迟加载的对象最初设置为null,每个对象请求都会检查null并在第一次返回之前动态创建它,如下面的C示例所示:
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get
{
if (myWidget == null)
{
myWidget = Widget.Load(myWidgetID);
}
return myWidget;
}
}
与你的问题有点相关注意关于惰性初始化的部分:我能感觉到你的兴奋,但是不,这没有一个通用的名称,也不是一种模式,因为你看到a它没有被广泛使用,b只有你知道它,这是相当琐碎的。我对你们的概念感到困惑,只有你们知道它-对我来说,似乎不可能没有人面对树的一致性问题,并像这样解决它。另一方面,如果这是真的,你说没有人使用这个/它不广泛-我甚至更担心以后可能出现的潜在问题。有时这是非常有用的,特别是在一个集合访问器中,你想过滤更改以选择叶子。请注意并发性问题。