zoukankan      html  css  js  c++  java
  • 不要小看了get 与set

    不知道大家曾经是怎么使用实体中的getset.我先前是这样使用的.

    定义一个实体类.之后写与之相关的字段名称.最后匹配上与之相关的属性,控制字段的读写权限.

    曾经使用方式

    代码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;

    以上是背景。以下说说自身的使用


    getset使用的体会

    在表的设计中我们使用不经常使用到表的关联,可是在实体对象中。我们是经经常使用到的却是实体关联。而关联的使用。它的控制就体如今 getset中。

    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发现getset的使用方法非常灵活,变通的非常。同一时候也是面向对象的一种体现。

    可是我们却非常少这样使用。

    2同一时候在定义实体类的时候也非常少使用实体关联的方法,这样大大降低了面向对象的使用。

    3定义属性和字段。并非必要的,要依据实际情况来使用。小小的使用经验。希望对大家全部启示。实例源代码下载

    下篇介绍动态载入中的泛型托付參数使用

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6928520.html
Copyright © 2011-2022 走看看