我正在开始构建一个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; } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。