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...