抽象類別和介面的區別 |
抽象類別 |
使用abstract關鍵字(abstract class) 可以包含功能定義和實現 反映的是事物的內部共性 不能被執行個體化 例:Public abstract class Withdraw |
介面 |
使用interface關鍵字 只能包含功能定義 因此反映的是事物的外部特性 不能被執行個體化 例:Public interface Withdraw |
結構和類的區別 |
結構 |
是實值型別,儲存在棧上 對結構中的資料進行操作比對類或對象中的資料進行操作速度要快 一般用結構儲存多種類型的資料 當建立一個很多類或對象共用的小型對象時,使用結構效率更高 |
類 |
參考型別,儲存在受管制的堆上 |
抽象方法和虛方法的區別 |
抽象方法 |
使用abstract關鍵字 必須被衍生類別覆寫的方法 可以看成沒有實現體的虛方法,是虛方法的一種 例:Public abstract bool Withdraw(…); |
虛方法 |
使用virtual關鍵字 虛方法可以有實現體 可以在子類中覆蓋,也可以不覆蓋使用父類的預設實現 例:public virtual bool Withdraw(…); |
實值型別和參考型別的區別 |
實值型別 |
實值型別的變數直接存放實際的資料 把變數的值儲存在堆棧中 |
參考型別 |
參考型別的變數存放的則是資料的地址,即對象的引用 把實際資料的地址儲存在堆棧中,而實際資料則儲存在堆中 |
堆和堆棧的區別 |
堆 |
堆一般用於儲存可變長度的資料,如字串類型 |
堆棧 |
用於儲存固定長度的資料,如整數型別的資料 |
Const和readonly的區別 |
Const |
只能在該欄位聲明中初始化 const 欄位是編譯時間常數 const 預設就是靜態 const 對於參考型別的常數,可能的值只能是 string、實值型別和 null |
Readonly |
可以在聲明或建構函式中初始化 根據所使用的建構函式,readonly 欄位可能具有不同的值 readonly 欄位可用於運行時常數 readonly 如果設定成靜態就必須顯示聲明 readonly可以是任何類型 對於一個 readonly 的 Reference 類型,只是被限定不能進行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的 |
面向過程和物件導向的區別 |
面向過程 |
是一種謂語和賓語的關係 |
物件導向 |
是一種主語和謂語的關係。特徵:封裝、繼承、多態 |
類和對象的區別 |
類 |
類是對某一類事物的描述,是抽象的、概念上的 定義。 *物件導向的設計的重點是類的設計。 |
對象 |
對象又稱作執行個體,是實際存在的該類事物的每個個體。 |
==和equeals()的區別 |
== |
辨別實質是否相等 |
equeals() |
辨別長相是否相等 |
override和overload的區別 |
override |
表示重寫,用於繼承類對基類中虛成員的實現 |
overload |
表示重載,用於同一個類中同名方法不同參數(包括類型不同或個數不同)的實現 |
private、protected、public、internal 修飾符的存取權限的區別 |
private |
私人成員, 在類的內部才可以訪問 |
protected |
保護成員,該類內部和繼承類中可以訪問 |
public |
公用成員,完全公開,沒有訪問限制 |
internal |
在同一命名空間內可以訪問 |
DataReader和DataSet的異同 |
DataReader |
始終佔用資料連線 線上操作資料庫任何對SqlConnection 的操作都會引發DataReader的異常,因為DataReader每次只在記憶體中載入一條資料,所以佔用的記憶體是很小的..因為 DataReader的特殊性和高效能.所以DataReader是只進的..你讀了第一條後就不能再去讀取第一條了 |
DataSet |
則是將資料一次性載入在記憶體中.拋棄資料庫連接..讀取完畢即放棄資料庫連接,因為DataSet將資料全部載入在記憶體中.所以比較消耗記憶體,但是確比DataReader要靈活..可以動態添加行,列,資料.對資料庫進行回傳更新操作 |
Appplication.Exit 和Form.Close的區別 |
Appplication.Exit |
退出整個引用程式 |
Form.Close |
關閉指定的Form |
Params、ref、out之間的區別 |
Params |
在方法聲明中的 params 關鍵字之後不允許任何其他參數,並且在方法聲明中只允許一個 |
Ref |
需要顯式初始化傳遞到 ref 參數的參數必須最先初始化。。 屬性不是變數,不能作為 ref 參數傳遞 |
Out |
不必初始化作為out參數傳遞變數,必須在方法返回之前為 out 參數賦值屬性不是變數,不能作為 out 參數傳遞 |
Finalize()和Dispose()之間的區別 |
Finalize() |
用於隱式釋放資源,相當於C++中的解構函式 |
Dispose() |
用於顯示釋放資源 |
做強簽名的assembly與不做強簽名的assembly有什麼不同 |
強簽名的程式集 |
可以做成com 可以安裝到gac中 |
不做強簽名的程式集 |
不能做出com,不能安裝到gac中 |
Assembly.LoadFrom()、Assembly.LoadFile()的區別 |
Assembly.LoadFrom() |
它是載入組件檔的內容,只將傳入參數的檔案載入,不考慮程式集依賴,但如果有相同實現,但位置不同的檔案用LoadFrom是不能同時載入進來的 |
Assembly.LoadFile() |
由於LoadFile載入的是檔案,所以調用它之後,可能因為缺少必要的依賴造成無法被執行,如果有相同實現,但位置不同的檔案用LoadFile是可以同時載入進來的 |
前期綁定(early-binding)和後期綁定(late-binding)的區別 |
前期綁定 |
前期綁定是在編譯的時候就確定了要繫結資料,前期綁定如果失敗,會在編譯時間報編譯錯誤 |
後期綁定 |
而後期綁定是在啟動並執行時候才填充資料,後期綁定失敗只有在運行時的時候才發生 |
使用ASMX的XML Web服務與使用SOAP的.NET Remoting的區別 |
Web服務 |
Web服務使用的訊息機制. Web Service能用於不同平台,不同語言。 |
Remoting |
Remoting採用的RPC,Remoting只適用於.Net。效率上Remoting高於Xml Web Service |
面向介面、物件導向、面向方面編程的區別 |
面向介面 |
面向介面更關注的是概念,它的原則是先定義好行為規範,再根據行為規範建立實現,嚴格的來說,面向介面應該是物件導向中的一部分吧,因為物件導向也強調的是依賴倒置原則,也就是實現依賴於抽象,而抽象不依賴於具體實現,更具比較的應該是面向介面與面向抽象對象,我的體會是面向介面更加靈活,但實現時候,稍微有些代碼冗餘,而面向抽象可以結合面向介面,先定義介面,再定義抽象類別,在抽象類別中處理一些公用邏輯,再實現具體實作類別。 |
物件導向 |
物件導向是對複雜問題的分解 |
面向方面 |
面向方面的編程是一種新概念,它解決了很多物件導向無法解決的問題,比如物件導向技術只能對業務相關的代碼模組化,而無法對和業務無關的代碼模組化。而面向方面正是解決這一問題的方案,它的關鍵思想是"將應用程式中的商業邏輯與對其提供支援的泛型服務進行分離"。 |
線程與進程的區別 |
線程(Thread)與進程(Process)二者都定義了某種邊界,不同的是進程定義的是應用程式與應用程式之間的邊界,不同的進程之間不能共用代碼和資料空間,而線程定義的是代碼執行堆棧和執行內容的邊界。一個進程可以包括若干個線程,同時建立多個線程來完成某項任務,便是多線程。而同一進程中的不同線程共用代碼和資料空間。用一個比喻來說,如果一個家庭代表一個進程,在家庭內部,各個成員就是線程,家庭中的每個成員都有義務對家庭的財富進行積累,同時也有權利對家庭財富進行消費,當面對一個任務的時候,家庭也可以派出幾個成員來協同完成,而家庭之外的人則沒有辦法直接消費不屬於自己家庭的財產 |
強型別和弱類型的區別 |
強型別 |
在編譯的時候就確定類型的資料,在執行時類型不能更改,強型別安全,效率高,一般用於編譯型程式設計語言,如c++,java,c#,pascal等 |
弱類型 |
而弱類型在執行的時候才會確定類型,弱類型相比而言不安全,在啟動並執行時候容易出現錯誤,但它靈活,多用於解釋型程式設計語言,如javascript,vb等 |
Remoting的通道Tcp和Http的區別 |
Tcp |
Tcp通道提供了基於Socket的傳輸工具,使用Tcp協議來跨越Remoting邊界傳輸序列化的訊息流程.TcpChannel使用二進位格式序列化訊息對象,因此它具有更高的傳輸效能。 |
Http |
HttpChannel類型使用Soap格式序列化訊息對象,因此它具有更好的互通性. |