1.override 与重载的区别
重载是⽅法的名称相同。参数或参数类型不同,进⾏多次重载以适应不同的需要,本质上不同的重载在编译时会分成不同的⽅法。
Override 是进⾏基类中函数的重写。在不同⼦类中有不同的实现,在 OO 中是⾏为的抽象。
2.什么是装箱和拆箱?
装箱:从值类型接⼝转换成 Object 引⽤类型为装箱。

拆箱:从 Object 引⽤类型强制转换到值类型为拆箱。

3.abstract class 和 interface 有什么区别?
声明⽅法的存在⽽不去实现它的类被叫做抽象类(abstract class),它⽤于要创建⼀个体现某些基本⾏为的类,并为该类声明⽅
法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然⽽可以创建⼀个变量,其类型是⼀个抽象类,并让它指向具体⼦类
的⼀个实例。不能有抽象构造函数或抽象静态⽅法。Abstract 类的⼦类为它们⽗类中的所有抽象⽅法提供实现,否则它们也是抽象类
为。取⽽代之,在⼦类中实现该⽅法。知道其⾏为的其它类可以在类中实现这些⽅法。
接⼝(interface)是抽象类的变体。在接⼝中,所有⽅法都是抽象的。多继承性可通过实现这样的接⼝⽽获得。接⼝中的所有⽅法都
是抽象的,没有⼀个有程序体。接⼝只可以定义 static final 成员变量。接⼝的实现与⼦类相似,除了该实现类不能从接⼝定义中继承⾏为。
当类实现特殊接⼝时,它定义(即将程序体给予)所有这种接⼝的⽅法。然后,它可以在实现了该接⼝的类的任何对象上调⽤接⼝的⽅法。
由于有抽象类,它允许使⽤接⼝名作为引⽤变量的类型。通常的动态联 编 将 ⽣ 效 。 引 ⽤ 可 以 转 换 到 接 ⼝ 类 型 或 从 接 ⼝ 类 型 转 换 ,
instanceof 运算符可以⽤来决定某对象的类是否实现了接⼝。
4.堆和栈的区别?
栈:由编译器⾃动分配、释放。在函数体中定义的值类型局部变量通常在栈上。
堆:⼀般由程序员分配释放。⽤ new 实例化的引⽤类型对象分配到堆上。
5、String 和 string 有什么区别?
String 和 string 是等价的,string 是关键字,在编译器编译时会把关键字 string 解析成 String 类。
相类似的还有很多,⽐⽅说 int 编译时会变成 Int32,long 会变成 Int64,Int32 和 Int64 都是.Net 内置定义好的结构体。
所以从本质上来说,.Net 内的关键字类型都是某些类、结构体、枚举等类型,只不过是.Net 已经提前内置定义好的。
6、字符串操作中为什么经常会转成字符数组然后进⾏ CopyTo 操
作?
因为字符串在堆中是以只读的形式存在,也就是说是不能修改的。在⼀些情况下,⽐如有⼀⼤篇⽂章,⾥⾯需要改很多⽂字,如果每次
进⾏字符串中的字符替换,都回在堆内存中重新分配整篇⽂章的内存空间,⾮常浪费资源,所以⼀个⾮常好的办法就是先转换成字节数组,
这时就是可修改的,修改完以后再⼀次性转成字符串。
7、复合格式化输出字符串时,如 String.Format({0,10:h},var1);这⼏
部分都是什么?
其中{0}是占位符,由后⾯的第⼀个参数变量 var1 替换,10 是代表占位长度,正数代表变量在右边,负数代表在左边。h 是格式化修饰
符,⽐如如果变量是时间类型的,h 代表⼩时。
8、字符串的 Trim()只⽤来去前后空格吗?去别的⾏吗?
问题⾮常好,Trim()⽅法有两个重载,默认空参数的重载的功能是去掉字符串的前后空格。另外⼀个重载是带参数的,参数类型是字符
数组,也就是可以去掉的各种字符。⽤⼀个例⼦来说明这个问题。
char[] rp = { 'a','b'}; string str = "a 你好,中国。b"; str = str.Trim(rp); MessageBox.Show(str);