有默认的构造函数
有析构函数
可以使用 abstract
和 sealed
有 protected
修饰符
必须使用 new
初始化
类是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作
为基类型对待的小对象,而类处理某个商业逻辑
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
2
.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用 sealed 声明,可是结构是隐
式的 sealed .
类:完全可扩展的,除非显示的声明 sealed
否则类可以继承其他类和接口,自身也能被继承
三.如何选择结构还是类
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
1
.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个
对象分配附加的内存。在此情况下,结构的成本较低。
3.在表现抽象和多级别的对象层次时,类是最好的选择
4
.大多数情况下该类型只是一些数据时,结构时最佳的选择
•
在.NET 程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配
“
”
数据?它们有性能上的区别吗? 结构 对象可能分配在堆上吗?什么情况下会发生,
有什么需要注意的吗?
NET 进程被创建时就会有一个堆随之被创建, 用来保存该进程在运行中需要使用的对象/数据; 当一个线程被创建时,
会有一个栈被创建,用来保存方法调用参数, 局部变量等轻量型数据.
当一个类里面包含一个结构体类型的变量时, 该结构体类型会被分配在堆上. (
…
不知道有什么需要注意的 )
•
泛型的作用是什么?它有什么优势?它对性能有影响吗?它在执行时的行为是什
么?.NET BCL 中有哪些泛型类型?举例说明平时编程中您定义的泛型类型。
泛型有利于算法重用.
.NET 进程地址空间中 , 对象和类型是分开存 放的 ,
当我们实例化一个泛型的时候 (比如 List<int> list = new
List<int>();), 会有一个新的类型对象被创建(该对象并不位于 GC 堆上), 当我们在使用这个实例化泛型去创建新的对
象时, 才会有一个对象(GC 堆上)被创建. 所以性能上会有些许的损失. 当我们使用一个值类型作为参数,去调用一个
接收引用类型参数的方法是, 会有装箱发生, 这时我们可以考虑实现一个泛型, 并在运行时确定方法的参数类型.
•
异常的作用是什么?.NET BCL 中有哪些常见的异常?在代码中您是如何捕获/处理
“
异常的?在 catch (ex)”
“
中, throw” “
和 throw ex”有什么区别?您会如何设计异常的结构,
什么情况下您会抛出异常?
呃, 异常可以通知我们程序出错, 比如 ArgumentException, NullReferenceException…
异常的发生会导致一次 stack walk, 去寻找对应的 exception handler, 在这个过程中, stack trace 的信息会被一层层的收