zoukankan      html  css  js  c++  java
  • c#问答篇:对象与引用变量-----初学者的困惑

    转自:http://www.cnblogs.com/huangyu/archive/2004/08/02/29622.html

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

    //定义一个名为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是引用变量。
  • 相关阅读:
    简单验证用户输入身份证号和手机号
    伸展树(Splay Tree)
    AVL树
    Size Balanced Tree(节点大小平衡树)
    Treap
    可持久化线段树(主席树)
    划分树
    归并树
    zkw线段树
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/sheseido/p/4989148.html
Copyright © 2011-2022 走看看