面试题整理:C#(二)

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: |||超大  

1.类,接口的区别

从定义的角度

类描述一个实体,包括状态、属性和动作

接口定义一类动作,没有实现,也没有状态信息

从程序的角度

接口是函数声明;类是函数实现

接口可以有属性,不能有字段

一个子类只能继承一个父类,但是可以继承多个接口

2.接口和抽象类的区别

抽象类是一类事物的高度聚合,接口是定义行为的规范

抽象类定义方法时,可以有实现,也可以没有

接口中定义的方法,不能有实现

抽象类子类可以不重写抽象方法,继承接口的类必须有方法和属性的实现

3.抽象方法和虚方法的区别

抽象方法使用abstract关键字,虚方法是用virtual关键字

抽象方法必须被派生类重写,虚方法可以不重写

抽象方法可以看作没有实现的虚方法

类包含抽象方法,必须被定义为抽象类

4.Equal()、ReferenceEqual()、== 的区别

对于引用类型

Equal是比较引用的值是否相等

ReferenceEqual比较是否是同一个引用

Object a=new Object();

Object b=a;

Object c=new Object();

Object d=new Object();

c=(object)100;

d=(object)100;

System.Object.Equals(a, b); //return true

System.Object.ReferenceEquals(a, b);//return true

System.Object.Equals(c, d); //return true

System.Object.ReferenceEquals(c, d);//return false

对于值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。

5.进程和线程的区别

线程时CPU调度和分配的单位,进程内可以有多个线程,共享进程资源

6.使用Operator的注意事项

需要提供public static修饰符;

需要有返回值;参数类型可以不同;==和!=必须成对出现

7.Task和ThreadPool的区别

ThreadPool不支持线程的取消,完成、失败通知等交互

ThreadPool不支持线程执行的顺序

Task有属性,可以查询任务完成时的状态(IsCanceled\IsCompleted\IsFaulted)

Task没有提供回调时间通知,通过启动一个新任务的方式完成类似的功能。

ContinueWith可以在一个Task完成时发起一个新的任务,支持了任务的完成通知,可以在新任务中获取旧任务的结果

ThreadPool可以节省创建销毁线程消耗的时间,减少内存浪费,和性能损失

8.Sealed关键字的作用

被Sealed类修饰的类和方法不能被继承和重写

9.能用foreach遍历访问的对象需要实现什么接口或者声明什么方法

不一定要实现IEnumerable接口,一定要实现GetEnumerator方法

10.构造函数是否可以被Override

不可以,构造器不能被继承,不能被Override,可以被Overload

TO BE CONTINUE...

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有