摘要:
现在总算是进展到OOP最重要的类型了,感觉很兴奋但又困惑,因为C#中有很多与其他OOP语言像是java大不相同的处理。1.可见性 C#中的可见性很多与java重叠并且意义相同,但有一个特别的internal(internal其实并不特别)。internal表示仅对定义程序集(assembly)中的所有代码可见,至于其他程序集不可见。我的第一眼感觉就是java的默认访问权限,即包访问权限,至少它们是类似的。事实上,CLR中的程序集的确对应包,因为它的定义就是一个或多个模块/资源文件的逻辑性分组,而且是重用,安全性及版本控制的最小单元,这些都符合包的特点。正如包访问权限是java的默认权限一样,C 阅读全文
摘要:
装箱(boxing)机制是一个值得单独拿出来讨论的话题,因为忽略它,我们会在不知不觉间犯下很大的错误。先说说装箱的过程:会先在堆中分配好内存,该内存大小为值类型所有字段和添加的类型对象指针以及同步块索引所需的字节,然后将值类型字段复制到这块新分配的内存中,接着返回对象的地址值,即该对象的引用。拆箱并不是装箱的逆操作:拆箱只是获取一个引用,该引用指向值类型的字段,它并不要求复制字段,复制字段实际上拆箱之后的动作,但这个动作是一定会发生。 装箱设计到字段的复制,所以需要特别小心。但C#中有一个隐式装箱机制,使得我们很多时候防不胜防。所以,最好的做法就是显式的进行转换,而不是交给编译器。 如果大家. 阅读全文
摘要:
要了解一门编程语言,首先就要了解它的类型。我们知道,C#一共分为两大类型:值类型和引用类型,但值类型并不单纯是我们java中的基本数据类型那么简单,有关于是否使用值类型还是个值得讨论的问题:因为装箱机制。C#的值类型还能够自定义方法,甚至能够实现引用类型的接口类型!这已经超出了我的想象范围了! 先来点基础的东西:基本内容. 文档是我们学习的好帮手,在C#的文档中,我们必须注意,凡是引用类型的,名字都是"xx类",凡是值类型的,就叫"xx结构"或"xx枚举"。 很多时候,我们的初始化操作的右值是表达式。如果左值是值类型,那么它的值就是表 阅读全文