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

c# – IList的默认getter

发布时间:2020-12-16 00:11:05 所属栏目:百科 来源:网络整理
导读:我正在开始构建一个C#应用程序,而且我的眼中有一点刺: 我的大多数类都有一堆属性,如下所示: private IListAddress _addresses;private IListPhone _phones;public virtual IListAddress Addresses{ get { if (_addresses == null) _addresses = new ListAd
我正在开始构建一个C#应用程序,而且我的眼中有一点刺:

我的大多数类都有一堆属性,如下所示:

private IList<Address> _addresses;
private IList<Phone> _phones;

public virtual IList<Address> Addresses
{
    get
    {
        if (_addresses == null)
            _addresses = new List<Address>();
        return _addresses;
    }
    set { _addresses = value; }
}
public virtual IList<Phone> Phones
{
    get
    {
        if (_phones == null)
            _phones = new List<Phone>();
        return _phones;
    }
    set { _phones = value; }
}

我想知道,有没有办法在一个地方定义这种行为(具体来说,默认的getter),并重用它?我应该以某种方式扩展IList吗?

就像我可以使用

public virtual string Temp { get; set; }

代替:

private string _temp;
public virtual string Temp
{
    get { return _temp; }
    set { _temp = value; }
}

解决方法

我会在等待C#6时创建一个静态辅助函数,这就是我在MVVM框架中的选择.我认为这是一个相当普遍的实现,可以添加更多的重载来处理极端情况.

public static class PropertyHelper
{
    public static T Get<T,U>(ref T backingField,U initialValue = null)
        where T : class
        where U : class,T,new()
    {
        initialValue = initialValue ?? new U();
        return backingField ?? (backingField = initialValue);
    }
}

public class MyClass
{
    private IList<int> myVar;

    public IList<int> MyProperty
    {
        get { return PropertyHelper.Get<IList<int>,List<int>>(ref myVar); }
        set { myVar = value; }
    }

    private IList<int> myVar2;

    public IList<int> MyProperty2
    {
        get { return PropertyHelper.Get(ref myVar2,new List<int>()); }
        set { myVar2 = value; }
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读