C#面试题
1. C#中的委托是什么?事件是不是一种委托?
委托可以把一个方法作为参数代入另一个方法,委托可以理解为指向一个函数的引用。
是,是一种特殊的委托
2. override与重载的区别
重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要
override 是进行基类中函数的重写。为了适应需要。
3. 实现冒泡算法
int [] array = new int [3] ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array[i]) { temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }
4.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
可以用任意类型。
5.什么叫应用程序域?
Net的运行环境,CLR将程序分成一个或多个逻辑区域就叫应用程序域AppDomain。
6. CTS、CLS、CLR分别作何解释?
CTS:通用类型系统。CLS:通用语言规范。CLR:公共语言运行库。
7. 什么是装箱和拆箱?
从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。
8.什么是受管制的代码?
unsafe:非托管代码。不经过CLR运行。
9.什么是强类型系统?
RTTI:类型识别系统。
10.在.net中,配件的意思是?
程序集。(中间语言,源数据,资源,装配清单)
11. 根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。
public void test(int i) { lock (this) { if (i > 10) { i--; test(i); } } }
不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
12.能用foreach遍历访问的对象需要实现______接口或声明_______方法的类型。
答:IEnumerable 、 GetEnumerator。
13.GC是什么? 为什么要有GC?
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc() , Runtime.getRuntime().gc()
14.abstract class和interface有什么区别?
abstract类: 有一个抽象方法的类叫抽象类
interface接口: 只能包含方法,委托,事件,属性,这些都是为实现(抽象的)
15. 接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?
接口可以继承接口。抽像类可以实现(implements)接口,抽像类是否可继承实体类,但前提是实体类必须有明确的构造函数。
16. 构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
17. 是否可以继承String类?
String类是final类故不可以继承。