c#中{set;get;}使用逻辑
(先把结论提前)下面两种定义私有变量配合公有变量的方法都没有意义,除非有特殊的逻辑需要在set或get中,其它情况都等效于
public GM_Arc Arc {set;get;} //不进行初始化,允许该变量为null时使用。等同于public GM_Arc Arc;但是,前者VS能提示引用位置和数量,
因此无论是简单值变量还是对应引用类型变量,都推荐使用{set;get;},尽量不要在定义时赋初值=new xxx();
{set;get;}是用来给成员变量赋值的,如
public string name { get; set; }
public GM_Point ThrPnt { get; set; }
它既可以给简单的值变量赋值,也能给对象变量也就是引用类型变量赋值
但是,这只是一种标准写法,并未对变量初始化,实际意义与下面代码相同。
public string name;
public GM_Point ThrPnt ;
但是,加上{ get; set; }
使用中,如果直接对它取值可能会报值为空的错误。如name.ToUpper(),或ThrPnt.Lat="";都会报错,但直接赋值不会有问题,如name="";ThrPnt=Point等。
此外, { get; set; }其实就是VS对下面结构的简写
private GM_Arc _arc
public GM_Arc Arc
{
get
{
return _arc;
}
set
{
_arc = value;
}
}
如果要确保引用类型在任何情况下都不会报空值错误,可以在前面的get中加上赋值语句,如
get
{
if (_arc == null)
_arc = new GM_Arc();
return _arc;
}
这样做,有利有弊,弊端是该变量允许为null时,也会被强制初始化。而且是在宿主对象初始化时,这些引用类型对象也全部初始化了。
因此,它就等同于定义该变量时就直接初始化 public GM_Arc Arc=new GM_Arc Arc();
所以,上面两种定义私有变量配合公有变量的方法都没有意义,除非有特殊的逻辑需要在set或get中,其它情况都等效于
public GM_Arc Arc {set;get;} //不进行初始化,允许该变量为null时使用。
public GM_Arc Arc=new GM_Arc Arc(); //立即初始化,不允许该变量为null时使用。
c#中{set;get;}使用逻辑的更多相关文章
- 研究分析JS中的三种逻辑语句
JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ...
- 用适配器模式处理复杂的UITableView中cell的业务逻辑
用适配器模式处理复杂的UITableView中cell的业务逻辑 适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell ...
- Objective-C中小怪兽的逻辑
学习Objective-C的面向对象也有一段时间了,为了犒劳自己的学习成果,写个小怪兽来犒劳一下自己把.在LOL中有怪兽和英雄的角色吧,接下来就先写一个小怪兽的类吧.从小怪兽的角度来讲,怪兽都有那些行 ...
- SqlServer中Sql语句的逻辑执行顺序
准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...
- MDX Cookbook 04 - 在集合中实现 NOT IN 逻辑 (Minus, Except, Filter 等符号和函数的使用)
有时需要从一些查询结果里排除掉一些成员,当然平常情况下可以通过 MDX 查询中的 WHERE 条件即 Slicer 切片来完成,同样的这里显示的是如何在切片中排除掉一些成员. 先看这一个查询 - , ...
- JS中循环逻辑和判断逻辑的使用实例
源代码见: https://github.com/Embrace830/JSExample &&和||的理解 a || b:如果a是true,那么b不管是true还是false,都返回 ...
- 新玩法,CentOS7中LVM通过扩展逻辑卷扩展swap空间
在我们日常运维工作中,偶尔也会遇到需要扩展swap空间的操作.扩展swap空间的方法很多,现在让我们一起来探讨一下,在LVM下扩展swap空间的方法. 1.查看一下卷组,是否还有空闲空间能用于扩展sw ...
- 在java 8 stream表达式中实现if/else逻辑
目录 简介 传统写法 使用filter 总结 简介 在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢? 还记得我们在上一篇文章lambda最佳实践中提到,la ...
- verilogHDL设计中的同步时序逻辑
引用自夏宇闻教授 1.同步时序逻辑: 是指表示状态的寄存器组的值只能在唯一确定的触发条件发生改变. 只能由时钟的正跳变沿或者负跳变沿触发的状态机就是一例,always@(posedge clk). 1 ...
随机推荐
- Robot Framework(一)
一. 定义 Robot Framework是一款python编写的功能自动化测试框架,具有良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行 二. Robot ...
- SVN与Git优缺点比较
1.SVN优缺点优点: 1. 管理方便,逻辑明确,符合一般人思维习惯. 2. 易于管理,集中式服务器更能保证安全性. 3. 代码一致性非常高. 4. 适合开发人数不多的项目开发. 缺点: 1. 服务器 ...
- 【git】常用命令大全
Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 后边接仓库文件地址 查看远程仓库:$ gi ...
- Android开发调试中遇到的Waiting for HOME解决方案
显示问题如图: 基本解决思路:在AVD里面单独启动运行一次模拟器,然后尝试运行程序,基本会解决这个问题.
- asp.net获取URL和IP地址
(转自:http://www.cnblogs.com/JuneZhang/archive/2010/11/26/1888863.html) HttpContext.Current.Request.Ur ...
- js获取一周的日期范围
function getWeek() { this.nowTime = new Date(); this.init = function() { this.dayInWeek = this.nowTi ...
- L140
一本载有许多时装照片的杂志是用带有光泽的优质纸印制的.A glossy magazine has lots of pictures of fashionable clothes and is prin ...
- Agilent RF fundamentals (8) Oscillator Decisions
----------------------
- 第1章 Flex介绍
* Flex Flex 是一个高效.免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器.桌面和操作系统 ...
- Reinforcement Learning Q-learning 算法学习-4
Q-learning 相关的资料 https://www.youtube.com/watch?v=V1eYniJ0Rnk google deepmind 的Q-learning 算法打游戏的一个很酷的 ...