1.静态成员和非静态成员的区别?
静态字段为类型所有实例所共享,而实例字段则为每个对象实例所专有。
静态方法不能访问实例成员,而且无需对象实例即可调用。
静态构造方法仅在AppDomain初始化类型时执行一次,而且具有AppDomain级别的线程安全性。而实例构造函数则在对象初始化时执行。
2.const 和 static readonly 区别?
const的字段在编译时会将其字面值直接写到引用它的地方,而且必须用字面常量在编译时初始化。
static readonly可以在运行时初始化。
3.extern 是什么意思?
extern表示函数体在其他地方定义。因此这样的函数只有声明没有定义。
4.abstract 是什么意思?
abstract用于类表示该类不能实例化,用于成员表示它是子类必须重写的过程。
5.internal 修饰符起什么作用?
表示该类型或成员仅在同一程序集中可被其他类型所访问。
6.sealed 修饰符是干什么的?
表示该类型不能被继承,或该(虚拟)成员不能再被子类所重写。
7.override 和 overload 的区别?
我其实不太愿意讨论两个范畴的东西有什么区别,因为硬要说区别就等于把两者的定义分别写一遍。
8.什么是索引指示器?
是一种带参数的属性,通过obj[params]的语法进行调用。
9.new 修饰符是起什么作用?
它指示该过程在MethodTable中开启一个新的“slot”,从而断开基类同名虚成员对其的调用关系。
10.this 关键字的含义?
在引用类型中,它表示所调用的对象实例的引用。在值类型中,它是一个符号,将this上的各种操作转嫁给所调用的值类型对象实例。
11.可以使用抽象函数重写基类中的虚函数吗?
当且仅当基类中相应的函数也为抽象函数。
12.密封类可以有虚函数吗?
可以,甚至有些封闭类带有新声明的虚函数(所有委托类型)。
13.什么是属性访问器?
使用访问变量的语法访问属性时,实际被调用的过程。
14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
可以和override一起使用,当且仅当重写一个父类的虚成员时。
15.接口可以包含哪些成员?
接口仅可以包含过程,即方法、属性、事件。而且只能定义过程的签名,不能定义他们的方法体、访问级别等。
16.类和结构的区别?
类为引用类型
结构为值类型
结构没有终结器
结构不能继承
结构必须有一个默认构造方法,且不能自定义无参数构造方法
结构的成员不能在声明时赋值
结构默认有专门实现的不同==和GetHashCode方法
17.接口的多继承会带来哪些问题?
任何特性均在正确使用时发挥正确的效果。因此我们应该看到多继承的优势。
18.抽象类和接口的区别?
抽象类可以有构造方法
抽象类可以有终结器
抽象类可以有字段
抽象类可以有静态成员
抽象类可以没有抽象方法
抽象类可以有实例方法
一个类只能继承一个抽象类,而可以实现多个接口
抽象类的成员可以带有访问性级别
抽象类之间不能多继承,接口则可以
抽象类可以有静态构造方法
19.别名指示符是什么?
命名空间别名限定符::专名用来限定所用的名字要从指定别名所表示的范围开始搜索。别名为extern或using关键字定义的命名空间或根别名。
20.如何手工释放资源?
没有手工释放托管资源的功能,尽管有些看其来是在释放其实不是。只能手工释放非托管资源。
21.P/Invoke是什么?
通过Runtime进行封送(Marshal),调用公开方式的非托管代码,包括DLL和COM等。
22.StringBuilder 和 String 的区别?
基本上是写出两者定义的那种“区别”
23.explicit 和 implicit 的含义?
这是两个类型转换运算符,explicit运算符需要明确指出目标类型名,而implicit会根据上下文自动调用。
24.params 有什么用?
一种提供参数数目可变的参数传递方法。任意数目的参数可转化为一个数组。
25.什么是反射?
通过程序基内的元数据和Runtime的支持在运行时读取程序集、模块、类型和成员的信息,以及在运行时通过这种途径访问对象的成员或执行对象的方法。甚至动态改变类型和方法的组成。