zoukankan      html  css  js  c++  java
  • C# —学习 6.11

    C#中new一个对象的过程说明

    在代码中我们经常能看到下面这样的语句。

    1
    2
    3
    A a = new A();(1)
    B b = null;(2)
    C c;(3)

      

    代码(1)

    创建A的对象并对其进行初始化。

    A:类;

    new A():创建A的对象并对其初始化;

    a:引用,指向new A()这个对象的引用。

    注意:a不是A的对象,new A()才是A的对象。

    代码(2)

    声明引用b,并指向null。

    B:类;

    b:引用,指向的对象为null(空)。

    代码(3)

    与代码(2)一样,声明一个引用。

    与代码(2)的区别是:代码(3)中声明的引用c不指向任何对象。

    提示:变量本质上是引用的一个别名而已。

    由上面的分析可以了解到,在C#中实例化一个对象时,需要经历下面这几步:

    声明引用;
    使用new关键字创建类的对象并对其初始化;(分配内存空间)
    将引用指向类的对象。
    若没有使用new关键字创建类的实例,则仅仅创建引用,指向的对象为null。

    实例说明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public class ExampleModel
    {
        public int C1 { getset; }
        public string C2 { getset; }
    }
      
    ExampleModel e1 = new ExampleModel();
    ExampleModel e2 = null;
    ExampleModel e3;
      
    if (e1 == null)
    {
        Console.WriteLine("e1 == null");
    }
    else
    {
        Console.WriteLine("{ C1 = " + e1.C1 + ", C2 = " + e1.C2 + " }");
    }
      
    if (e2 == null)
    {
        Console.WriteLine("e2 == null");
    }
    else
    {
        Console.WriteLine("{ C1 = " + e2.C1 + ", C2 = " + e2.C2 + " }");
    }
      
    if (e3 == null)
    {
        Console.WriteLine("e3 == null");
    }
    else
    {
         Console.WriteLine("{ C1 = " + e3.C1 + ", C2 = " + e3.C2 + " }");
    }

      编译代码,会出现编译错误,提示“使用了未赋值的局部变量e3”,原因是并未对e3进行初始化,但是使用e2变量时并不会产生编译错误,因为e2已经被初始化了,只是初始化的值为null而已,这并不影响编译的通过。

    注释掉e3 部分的代码,运行程序得到下图所示的结果。

    在开发过程中,我们还是尽量不要让一个引用指向null,否则在运行过程中很容易出现空引用的异常。

    修改e2部分的代码,去掉e2是否为空引用的条件判断,并运行程序。

    运行中,会产生“未将对象引用设置到对象的实例。”的异常。(原因你懂的。)

    同样去掉e1部分中是否为空引用的条件判断语句,再次执行程序,一切正常。(因为e1指向了不为null的对象)

    悟已往之不谏,知来者之可追
  • 相关阅读:
    yzoj P2344 斯卡布罗集市 题解
    yzoj P2350 逃离洞穴 题解
    yzoj P2349 取数 题解
    JXOI 2017 颜色 题解
    NOIP 2009 最优贸易 题解
    CH 4302 Interval GCD 题解
    CH4301 Can you answer on these queries III 题解
    Luogu2533[AHOI2012]信号塔
    Luogu3320[SDOI2015]寻宝游戏
    Luogu3187[HNOI2007]最小矩形覆盖
  • 原文地址:https://www.cnblogs.com/ljh-study/p/13096017.html
Copyright © 2011-2022 走看看