zoukankan      html  css  js  c++  java
  • C# 对象与引用变量

    从宏观的角度来看,对象是类的实例。比如:

    //定义一个名为Someone的类,代表这么一些人(通过指定年龄,性别,性格等基本信息)
    class Someone {
      public int age;
      public string sex;
      public string name;
      //other...
    }

    //......
    //创建一个Someone类的对象,代表昵称为nemo的一个特定的人
    Someone nemo = new Someone();

    这时,我们会象通常所说的那样讲到:我们创建了一个名为nemo的Someone类的对象(是的,这没有错,但它会和下文所讲的一些内容产生些许理 解上的困惑)。因为每当创建类的一个实例(昵称为nemo的某人),就创建该类的一个对象(名为nemo的Someone类的对象),而每个对象自身包含 类中定义的所有实例变量(age,sex,name等)的一个拷贝,所以说对象nemo是Someone类的实例。顺便,我们再创建一个名为andy的 Someone类的对象:

    Someone andy = new Someone();

    对象nemo和对象andy是相同的吗?他们仅仅是名字不同而已吗?不——因为每个对象的变量的值不同!比如:

    nemo ——>|age       20      |        andy ——> |age         40        |
                   |sex        “男”   |                      |sex    “男”   |
                   |name  “尼 莫”|                        |name  “刘德华”|

    所以nemo和andy是两个不同的对象,唯一相同的是它们都属于同一种类型——Someone类!


    而从微观的角度来看,我们前面所说的“对象nemo”真的是对象吗?你可能会奇怪我怎么会这么问...
    实际上,
    Someone nemo = new Someone();
    这一创建一个Someone类的对象的过程分为两步:

    //声明一个引用变量
    Someone nemo;

    //创建一个Someone类的对象,new运算符使运行时为该对象动态的分配内存;
    //然后返回该对象所在的内存地址,并赋于变量nemo,从而引用变量nemo指向该对象
    nemo = new Someone();

    此时,对于nemo的理解应该是:nemo是一个引用新创建的Someone类对象的变量(如同c语言的指针变量),它本身并不是一个对象!

        引用变量nemo             对象所在内存地址(设运行时为其分配起始地址为100号的连续内存单元)  
        |          ——|————>100|     20     | age
                                           |    “男”  | sex
                                           | “尼 莫” | name


    现 在你理解了为什么说类是引用类型了吧?——类对象通过引用来访问呀!同时,也说明了为什么上文说“nemo和andy是两个不同的对象”——运行时为对象 动态分配内存,所以两个对象所在的内存地址不同,当然两个对象是不同的咯!——等等,你刚刚不是说nemo是引用变量吗?怎么又说“nemo... 是...对象”了呢?
    笔者在初学时在理解上存在这样的困惑!
    但是,你可能注意到了,Someone是一个类,而nemo自然就是声明为这个类的一个变量;而类作为一种类型,它是属于引用类型,所以nemo自然就是一个引用类型的变量即引用变量了啊。
    关键的一点是,我们可以从不同的角度来看这一问题:宏观上,nemo是对象;而微观上,深层的理解,nemo是引用变量。

  • 相关阅读:
    【2017-06-20】Linux应用开发工程师C/C++面试问题记录之一:Linux多线程程序的同步问题
    April 14 2017 Week 15 Friday
    April 13 2017 Week 15 Thursday
    April 12 2017 Week 15 Wednesday
    【2017-06-17】QtGui基础控件:QSpinBox及QDoubleSpinBox
    April 11 2017 Week 15 Tuesday
    April 10 2017 Week 15 Monday
    April 9 2017 Week 15 Sunday
    April 8 2017 Week 14 Saturday
    April 7 2017 Week 14 Friday
  • 原文地址:https://www.cnblogs.com/FavoriteMango/p/10718644.html
Copyright © 2011-2022 走看看