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...
新聞熱點
疑難解答