(先把结论提前)下面两种定义私有变量配合公有变量的方法都没有意义,除非有特殊的逻辑需要在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;}使用逻辑的更多相关文章

  1. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  2. 用适配器模式处理复杂的UITableView中cell的业务逻辑

    用适配器模式处理复杂的UITableView中cell的业务逻辑 适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell ...

  3. Objective-C中小怪兽的逻辑

    学习Objective-C的面向对象也有一段时间了,为了犒劳自己的学习成果,写个小怪兽来犒劳一下自己把.在LOL中有怪兽和英雄的角色吧,接下来就先写一个小怪兽的类吧.从小怪兽的角度来讲,怪兽都有那些行 ...

  4. SqlServer中Sql语句的逻辑执行顺序

    准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...

  5. MDX Cookbook 04 - 在集合中实现 NOT IN 逻辑 (Minus, Except, Filter 等符号和函数的使用)

    有时需要从一些查询结果里排除掉一些成员,当然平常情况下可以通过 MDX 查询中的 WHERE 条件即 Slicer 切片来完成,同样的这里显示的是如何在切片中排除掉一些成员. 先看这一个查询 - , ...

  6. JS中循环逻辑和判断逻辑的使用实例

    源代码见: https://github.com/Embrace830/JSExample &&和||的理解 a || b:如果a是true,那么b不管是true还是false,都返回 ...

  7. 新玩法,CentOS7中LVM通过扩展逻辑卷扩展swap空间

    在我们日常运维工作中,偶尔也会遇到需要扩展swap空间的操作.扩展swap空间的方法很多,现在让我们一起来探讨一下,在LVM下扩展swap空间的方法. 1.查看一下卷组,是否还有空闲空间能用于扩展sw ...

  8. 在java 8 stream表达式中实现if/else逻辑

    目录 简介 传统写法 使用filter 总结 简介 在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢? 还记得我们在上一篇文章lambda最佳实践中提到,la ...

  9. verilogHDL设计中的同步时序逻辑

    引用自夏宇闻教授 1.同步时序逻辑: 是指表示状态的寄存器组的值只能在唯一确定的触发条件发生改变. 只能由时钟的正跳变沿或者负跳变沿触发的状态机就是一例,always@(posedge clk). 1 ...

随机推荐

  1. HyperV创建NAT网络

    创建NAT内部网络,使用PowerShell完成. https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-gu ...

  2. 遍历jsonArray和jsonObject

    遍历jsonArray String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'}]&q ...

  3. IOS-SDWebImage根据网络状态加载图片

    iOS开发-你真的会用SDWebImage? 2016-05-17 hosea_zhou 有意思啊 原创作者:hosea_zhou 原文地址:http://www.jianshu.com/p/dabc ...

  4. MYSQL(python)安装记录

    捯饬了很长时间,终于安装成功了,特此记录下! MYSQL历史版本下载,一般为绿色版本 地址:http://downloads.mysql.com/archives/community/ MYSQL安装 ...

  5. UIPickerView/UIDatePicker/程序启动的完整过程

    一.UIPickerView 1.UIPickerView的常见属性 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id<UI ...

  6. hp g6 2328tx 加装ssd 机械硬盘安装到光驱位置 问题小结

    惠普 g6 笔记本从13年入手至今,三年有余,性能啥的开始跟不上了,所有入手了一块ssd,闪迪(sanDisk)加强版 240G的固态硬盘,准备升下级.狗东下午下单,第二天早上7点多到的,把老硬盘换下 ...

  7. PostgreSQL内存配置记录

    PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录. postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.mai ...

  8. 更改Linux栈空间大小

    1.通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2.通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400 ...

  9. c 可变参数(variable argument)的原理及使用

    本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装,最后是可能会出现的问题和避免措施. VA函数(variable argument function),参数个数可变函数 ...

  10. 洛谷P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    传送门 题目大意:n头牛在单行道n个位置,开始用不同的速度跑步. 当后面的牛追上前面的牛,后面的牛会和前面的牛以一样的速度 跑,称为一个小团体.问:ts后有多少个小团体. 题解:模拟 倒着扫一遍,因为 ...