• 不要小看了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定义属性和字段。并非必要的,要依据实际情况来使用。小小的使用经验。希望对大家全部启示。实例源代码下载

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

  • 相关阅读:
    mongodb集群搭建
    ansible 部署redis集群(三台主机6节点3主3备)
    nginx upstream bug
    回炉重造之 nginx
    docker 搭建jenkins环境
    搭建gitlab
    Dockerfile传入变量问题
    mysql8忘记root密码重置密码
    docker-compose容器化构建nginx服务
    docker-compose容器化构建minio服务
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6928520.html
Copyright © 2020-2023  润新知