标签:intern 子类 好的 不同 同方 空间 zh-cn 接口 array
面向对象三大特性
封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
多态:指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
面向对象五大原则
单一职责原则:一个类应该只有一个引起他变化的原因。
开放封闭原则:对扩展是开放的,对更改是封闭的。
里氏替换原则:子类可以替换父类并且出现在父类能够出现的任何地方。
依赖倒置原则:传统的结构化编程中,最上层的模块通常都要依赖下面的子模块来实现,也称为高层依赖低层。所以依赖倒置原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块。
接口隔离原则:使用多个专门的接口比使用单个接口要好的多。
Array
System.Array命名空间,数组,在内存中是连续存储的。
ArrayList
属于System.Collections,不需要指定长度能动态扩容。所插入的数据为object类型,会发生装箱拆箱。类型不安全。
List<T>
属于System.Collections.Generic,底层数据结构是数组,避免了装箱拆箱,并且类型安全。
LinkedList<T>
属于System.Collections.Generic,底层数据结构是双向链表,类型安全,因为是链表实现的索引不用动态扩容
HashSet<T>
属于System.Collections.Generic,底层数据结构是哈希表,不能用索引访问,值不能重复且没有顺序。
HashTable
属于System.Collections,底层数据结构是哈希表,键值对均为object类型,发生装箱拆箱,key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。
Dictionary<T>
属于System.Collections.Generic,底层数据结构是哈希表,因为是泛型所以没有装箱拆箱。
总结
C#所有泛型容器都在System.Collections.Generic命名空间下,非泛型容器在System.Collections空间下。
内存中的差别
类的实例一定在堆上,结构体的实例一般在线程栈上分配(虽然也可以作为字段嵌入引用类型的对象中)。
类的变量是实例在堆中的内存地址,结构体的变量中包含了实例本身的字段。这也是值类型和引用类型的区别。
字段的差别
结构体中不能设置字段默认值,类可以。
给字段设置默认值是inline内联的语法,我觉得这点差别是结构体不支持内联语法造成的。
默认构造器的差别
结构体和类都有默认的实例构造器,但结构体不能显式给出。
自定义构造器的差别
自定义的构造器,类定义了后默认的被隐藏,无参构造器就需要自己给出,不需要把所有字段初始化,结构体必须初始化所有实例字段和未初始化的非静态的字段。
声明实例时的差别
结构体在声明的时候就已经为其分配栈上的内存了,new只是初始化其字段,而类需要用new为其分配堆上面的内存。
可访问性的差别
所有值类型都隐式密封,目的是防止将值类型用作其他引用类型或值类型的基类型。
标签:intern 子类 好的 不同 同方 空间 zh-cn 接口 array
原文地址:https://www.cnblogs.com/errornull/p/10049693.html