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

//定义一个名为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是引用变量。

C# 对象与引用变量的更多相关文章

  1. c#问答篇:对象与引用变量-----初学者的困惑

    转自:http://www.cnblogs.com/huangyu/archive/2004/08/02/29622.html 从宏观的角度来看,对象是类的实例.比如: //定义一个名为Someone ...

  2. Python基础一. 简介、变量、对象及引用

    一.Python简介 Python是一门计算机编程语言,它是由荷兰人Guido van Rossum在1989年圣诞节期间为了打发无聊的圣诞节而编写的,作为ABC语言的继承 特性: 面向对象.解释型. ...

  3. C++引用变量(转)

    引用变量 c++中引用变量的使用: 定义: int rate=80; int  & pt=rate 1.pt 是引用变量,申明引用变量时必须将其初始化.pt 和rate 的值指向相同的内存变量 ...

  4. Java传参都是传引用变量的副本

    最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值. 1 Java中的引用变量 1.1 字面值引用变量:即基本数据类型的引用变量 ,如 in ...

  5. Java中对象和引用的理解

    偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆. 一.对象和引用的概念: 在Java中万 ...

  6. JavaSE---类、对象、成员变量、局部变量

    1.概述 1.1 类 1.1.1 类   是一种  自定义的  引用  数据类型: 1.2 对象 1.2.1 创建对象的根本途径:构造器: 通过new关键字   来调用  某个类的构造器: packa ...

  7. static成员变量与返回对象的引用

    (1)用static修饰类成员变量(属性),表明该变量是静态的,无论创建多少对象,都只创建一个一个静态属性副本,也就是对象们共享同一个静态属性,这个方法常用的一个用途就是用来计算程序调用了多少次这个类 ...

  8. Java提高篇(一):区分引用变量与对象

    我们有代码: New A=new New(); 下面是这个New的类: class New { public New() { System.out.println("这是New类当中的构造方 ...

  9. python变量、对象和引用你真的明白了吗

    python变量.对象和引用你真的明白了吗 变量.对象和引用 Python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是 ...

随机推荐

  1. TCP之传输对象 客户端传输user对象到服务端 验证登录是否合法

    Server.java package com.sxt.tcp4; import java.io.IOException; import java.io.ObjectInputStream; impo ...

  2. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  3. deepin golang微服务搭建go-micro环境

    1.安装micro 需要使用GO1.11以上版本 #linux 下 export GO111MODULE=on export GOPROXY=https://goproxy.cn # 使用如下指令安装 ...

  4. css3制作动画性能问题

    这篇文章主要讲的是怎样制作流畅动画,特别是针对移动端.在这里我首先介绍制作动画的几种方法的优缺点:接着会着重介绍用css3制作动画的注意事项. 1.用canvas.css3.jquery制作动画 Ca ...

  5. kuangbin专题-连通图A - Network of Schools

    这道题的意思是就是 问题 1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件. 2:至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校 ...

  6. 弹性FLEX布局

    页面布局一直都是web应用样式设计的重点 我们传统的布局方式都是基于盒模型的 利用display.position.float来布局有一定局限性 比如说实现自适应垂直居中 随着响应式布局的流行,CSS ...

  7. linux包之nmap之ncat命令

    [root@ka1che225 ~]# which nc/usr/bin/nc[root@ka1che225 ~]# which ncat/usr/bin/ncat[root@ka1che225 ~] ...

  8. CSS定位方式有哪些?position属性的值有哪些?他们之间的区别是什么?

    在CSS中关于定位的内容是:position:relative | absolute | static | fixed • static 自动定位,自动定位就是元素在页 面普通文档流中由HTML自动定 ...

  9. element-ui css 文件加载 失败(https://unpkg.com/element-ui/lib/theme-chalk/index.css,加载失败)

    在main.js文件引入   import Vue from 'vue'; import Element from 'element-ui'; import 'element-ui/lib/theme ...

  10. POJ 2406 Power Strings next数组循环节应用、

    题意:就给出个字符串做*的定义.a^0 = "" (the empty string) and a^(n+1) = a*(a^n).    题目要求n的最大值. 思路: 化简上面的 ...