zoukankan      html  css  js  c++  java
  • 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时使用。

  • 相关阅读:
    DHCP分配ip地址。0.0.0.0与255.255.255.255
    net-snmp配置文件详解
    net-snmp开发中出现“Error opening specified endpoint"" ”的解决方案
    Elasticsearch 学习笔记
    Prometheus 监控报警系统 AlertManager 之邮件告警
    Match All Query
    Elasticsearch postman
    Centos7修改root密码
    ElasticSearch中profile API的使用
    kafka查询某时间段内的消息
  • 原文地址:https://www.cnblogs.com/mol1995/p/7889206.html
Copyright © 2011-2022 走看看