不要小看了get 与set
Posted yutingliuyl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不要小看了get 与set相关的知识,希望对你有一定的参考价值。
不知道大家曾经是怎么使用实体中的get与set的.我先前是这样使用的.
先定义一个实体类.之后写与之相关的字段名称.最后匹配上与之相关的属性,控制字段的读写权限.
曾经使用方式
代码1
public class product { private string code; private string commodity_Name; public string Code { get{ return code; } set{ this.code=value; } } public string CommodityName { get { return commodity_Name; } set { this.commodity_Name = value; } } }
之后就能够再别的类中对product的属性进行取值和赋值了.这是我们经常使用的方式.
近期使用方式
而近期一直在使用的实体类中发现。有些仅仅进行了字段的声明或仅仅定义了属性,没有字段声明.
后来发现尽管类中没有声明字段,可是程序会默认生成一个字段:
Public String Name{ Get; Set; }
系统会生成默认字段string _name;
以上是背景。以下说说自身的使用
get与set使用的体会
在表的设计中我们使用不经常使用到表的关联,可是在实体对象中。我们是经经常使用到的却是实体关联。而关联的使用。它的控制就体如今 get与set中。
1使用get与set延迟载入
如:我们在上面的product类中关联了一个电商品清单集合类。
我们能够依据传入的code,实现动态的载入相关的产品清单。
代码2
private ProductElectricCollection _productElectric; public ProductElectricCollection ProductElectric { get { //集合类初始为空 if (_productElectric==null) {//推断关联的主类是否为空。说明已经载入了,那么就须要依据code从数据库中载入须要的电商品集合数据 if (this.code != null) { _productElectric = AdapterElectric.Instance.Load(this.Code); } //若传入的code为空,则创建一个空的集合类 else { _productElectric = new ProductElectricCollection(); } } //已经存在该集合 return _productElectric; } set { this._productElectric = value; } }
当我们载入完整个Product类的时候,引用类ProductElectric中是没有数据的
仅仅有当我们使用引用类中的数据时,才会触发调用该电商的数据。
这时候的写法非常例如以下
textBox1.Text=textBox1.Text = pc.ProductElectric[0].CommodityName.ToString();
这样就会调用实体类中预先写好的get方法。依据id载入我们我们电商集合订单。方法为以上的代码2。
该方法为一种简单的延迟载入方式。
2 使用get与set对其它字段赋值
不在自己的属性中对字段进行赋值
避免不必要常常调用,浪费资源
实例:
我们要算最小值,最小值须要使用到岗位经费,可是岗位经费须要依据职级载入。
1原来思路:定义岗位经费属性和字段。每次调用则获取员工职级进行载入。
就像上面的get方法一样,多次调用多次载入。
后来发现。计算费用须要多次调用该方法。实现是调用太频繁了,有些浪费资源。
2改动思路:岗位经费依据职级载入。仅仅要职级不变。那么经费就是不会改变的。
则在进行职级赋值时。进行经费载入,这样,兴许调用直接获取字段中的值,就不必要在多次载入了。
降低了资源的开销。同一时候也将开放的postExpenseAnnuallyAmount属性去掉了。也是一种不错的写法。
//员工岗位经费 private decimal _postExpenseAnnuallyAmount; private string _vocationLevel; /// <summary> /// 员工职级 /// </summary> public string VocationLevel { get { return this._vocationLevel; } set { //假设职级与获得的不相等。则进行经费载入。 if (_vocationLevel != value && (value!="")) { //依据职级载入岗位经费 _vocationLevel = value; var expense = PostExpenseStandardAdapter.Instance.GetDataByVocationLevel(Convert.ToInt32(_vocationLevel), DateTime.Now.SimulateTime()); if (expense != null) { this._postExpenseAnnuallyAmount = expense.PostExpenseAnnuallyAmount; } } this._vocationLevel = value; } } /// <summary> /// 最小薪酬值 /// 仅对宽带制有效,档级制时该值等于SalaryRealValue /// </summary> public Decimal MinSalaryValue { get { decimal salaryWithoutPostAmount = SalaryStandardValue * (1 - FloatSpan) - _postExpenseAnnuallyAmount; return IsNeedCityFactor ? salaryWithoutPostAmount * CityFactorValue : salaryWithoutPostAmount; } }
小结:
通过两个非常小的实例。
1发现get与set的使用方法非常灵活,变通的非常。同一时候也是面向对象的一种体现。
可是我们却非常少这样使用。
2同一时候在定义实体类的时候也非常少使用实体关联的方法,这样大大降低了面向对象的使用。
3定义属性和字段。并非必要的,要依据实际情况来使用。小小的使用经验。希望对大家全部启示。实例源代码下载
下篇介绍动态载入中的泛型托付參数使用
以上是关于不要小看了get 与set的主要内容,如果未能解决你的问题,请参考以下文章