加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 设置仅获取属性的值的首选方法:构造函数与支持字段

发布时间:2020-12-15 19:30:48 所属栏目:百科 来源:网络整理
导读:编辑:虽然我已经接受了 David’s回答,但也应该考虑 Jon’s回答. 设置只读(仅获取?)属性的值首选哪种方法:使用支持字段或使用构造函数?假设设计是针对属性而不是字段(将来,可能会有更新要求属性具有可以排除使用字段的setter). 鉴于以下简单示例,首选哪种
编辑:虽然我已经接受了 David’s回答,但也应该考虑 Jon’s回答.

设置只读(仅获取?)属性的值首选哪种方法:使用支持字段或使用构造函数?假设设计是针对属性而不是字段(将来,可能会有更新要求属性具有可以排除使用字段的setter).

鉴于以下简单示例,首选哪种方法?如果一个优先于另一个,为什么?

选项1(支持领域):

class SomeObject
{
    // logic
}

class Foo
{
    private SomeObject _myObject;
    public SomeObject MyObject
    {
        get
        {
            if( _myObject == null )
            {
                _myObject = new SomeObject();
            }
            return _myObject;
        }
    }

    public Foo()
    {
        // logic
    }
}

选项2(构造函数):

class SomeObject
{
    // logic
}

class Foo
{
    public SomeObject MyObject { get; private set; }

    public Foo()
    {
        MyObject = new SomeObject();
        // logic 
    }
}

解决方法

它取决于“new SomeObject();”所需的时间.以及将要调用吸气剂的可能性.

如果创建MyObject的成本很高,并且每次创建Foo()的实例时都不会使用它,那么选项1是个好主意,这就是所谓的延迟初始化. Google Chrome等程序会大量使用它来缩短启动时间.

如果您每次都要创建MyObject,并且经常调用getter,那么您将使用选项2保存每次访问的比较.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读