C# 对象与引用变量
从宏观的角度来看,对象是类的实例。比如:
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类的对象:
对象nemo和对象andy是相同的吗?他们仅仅是名字不同而已吗?不——因为每个对象的变量的值不同!比如:
|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语言的指针变量),它本身并不是一个对象!
| ——|————>100| 20 | age
| “男” | sex
| “尼 莫” | name
现 在你理解了为什么说类是引用类型了吧?——类对象通过引用来访问呀!同时,也说明了为什么上文说“nemo和andy是两个不同的对象”——运行时为对象 动态分配内存,所以两个对象所在的内存地址不同,当然两个对象是不同的咯!——等等,你刚刚不是说nemo是引用变量吗?怎么又说“nemo... 是...对象”了呢?
笔者在初学时在理解上存在这样的困惑!
但是,你可能注意到了,Someone是一个类,而nemo自然就是声明为这个类的一个变量;而类作为一种类型,它是属于引用类型,所以nemo自然就是一个引用类型的变量即引用变量了啊。
关键的一点是,我们可以从不同的角度来看这一问题:宏观上,nemo是对象;而微观上,深层的理解,nemo是引用变量。
最新文章
- 【干货分享】流程DEMO-固定资产转移流程
- java package一些试验
- WordPress For SAE 移植
- js 所有事件列表
- d.BIO连接器与NIO连接器的对比之二
- 友盟分享SDK集成步骤
- sublime 插件zen coding
- POJ 3461 Oulipo KMP
- hihoCoder#1080 (线段树)
- Dede 列表页 缩略图 有显示无则不显示
- MySql命令——命令行客户机的分隔符
- window.location.href(";url";) 无法在chrome和Firefoxz中使用
- excel单元格中批量加入固定字符
- LeetCodeOJ. Maximum Depth of Binary Tree
- SQL Server 2008 允许远程链接,适用于广域网和局域网
- Kettle根据时间戳同步数据实现
- SQL SERVER Management Studio
- [Swift]LeetCode463. 岛屿的周长 | Island Perimeter
- 2.2String工具类
- MySQL中链接查询inner join与left join使用
热门文章
- oracle函数 VARIANCE([distinct|all]x)
- @loj - 2339@ 「WC2018」通道
- vue init定制团队模板之meta.js/meta.json写法入门
- day5_python之环境变量设置
- array_map 用法
- 【CSS3 + 原生JS】上升的方块动态背景
- Educational Codeforces Round 10 A B题、
- Hammersley-Clifford定理证明
- webpack优化 -- compression-webpack-plugin 开启gzip
- codeforce 382 div2 E —— 树状dp