当前位置: 首页 > news >正文

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

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

转载于:https://www.cnblogs.com/yutingliuyl/p/6928520.html

相关文章:

  • redhat7.2升级openssl、openssh
  • [HAOI2016]食物链
  • 事物分析的维度
  • 调查微软恶意升级 Windows 10 请愿即将达成
  • DB-Engines 4 月份全球数据库排名,MySQL 跌幅最大
  • Cmd Markdown 发布第十四次更新 --- 使命的召唤
  • npm 宣布协作工具 Orgs 免费,可不限量管理公有包
  • 类orAPI - 收藏集 - 掘金
  • 关于W8.1不能安装VS2015(包括2017等)
  • 前端性能优化之优化图片 优化显示图片
  • Java中的重写
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • TeamCity 2017.1.2 发布,持续集成工具
  • 微软:请叫我 Android 预装服务提供商
  • arcgis engine 获取高亮Feature、element
  • [LeetCode] Wiggle Sort
  • 【comparator, comparable】小总结
  • 【剑指offer】让抽象问题具体化
  • Akka系列(七):Actor持久化之Akka persistence
  • Flannel解读
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Javascript设计模式学习之Observer(观察者)模式
  • markdown编辑器简评
  • MYSQL 的 IF 函数
  • PHP的Ev教程三(Periodic watcher)
  • react 代码优化(一) ——事件处理
  • vue-router 实现分析
  • 欢迎参加第二届中国游戏开发者大会
  • 前端面试之CSS3新特性
  • 使用Gradle第一次构建Java程序
  • 试着探索高并发下的系统架构面貌
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我这样减少了26.5M Java内存!
  • 应用生命周期终极 DevOps 工具包
  • 智能网联汽车信息安全
  • ionic异常记录
  • ​渐进式Web应用PWA的未来
  • ​马来语翻译中文去哪比较好?
  • # centos7下FFmpeg环境部署记录
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (function(){})()的分步解析
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)Eureka服务搭建,服务注册,服务发现
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)shell调试方法
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)用.Net的File控件上传文件的解决方案
  • .NET delegate 委托 、 Event 事件
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 中的轻量级线程安全
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)