background image

 

有默认的构造函数

 

有析构函数

 

可以使用 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 的信息会被一层层的收