。net面试题(2)
什么是抽象類(abstract class)?
一種不可以被實例化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽
象類的抽象方法后才能被實例化。
何時必須聲明一個類為抽象類?
當這個類中包含抽象方法時,或是該類并沒有完全實現父類的抽象方法時。
接口(interface)是什么?
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。
為什么不能指定接口中方法的修飾符?
接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護沒有意義。他們默認為公有方法。
可以繼承多個接口么?
當然。
那么如果這些接口中有重復的方法名稱呢?
這種情況中你可以決定如何實現。當然需要特別得小心。但是在編譯環節是沒有問題的。
接口和抽象類的區別是什么?
接口中所有方法必須是抽象的,并且不能指定方法的訪問修飾符。抽象類中可以有方法的實現,也可以指
定方法的訪問修飾符。
?
詳述.NET里class和struct的異同!
類是引用類型,可以繼承類、接口和被繼承,有默認的構造函數,有析構函數,可以使用abstract和sealed,有protected修飾符,必須使用new初始化。
結構是值類型,只能繼承接口,不能被繼承,沒有默認的構造函數,可以創建,沒有析構函數,不可以用abstract和sealed,沒有protected修飾符,可以不用new初始化。
如何選擇結構還是類
1. 堆棧的空間有限,對于大量的邏輯的對象,創建類要比創建結構好一些
2. 結構表示如點、矩形和顏色這樣的輕量對象
例如,如果聲明一個含有 1000 個點對象的數組,則將為引用每個對象分配附加的內存。
在此情況下,結構的成本較低。
3. 在表現抽象和多級別的對象層次時,類是最好的選擇
4. 大多數情況下該類型只是一些數據時,結構時最佳的選擇
C#中的接口和類有什么異同。
異:
不能直接實例化接口。
接口不包含方法的實現。
接口、類和結構可從多個接口繼承。但是C# 只支持單繼承:類只能從一個基類繼承實現。
類定義可在不同的源文件之間進行拆分。
同:
接口、類和結構可從多個接口繼承。
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
一個類可以實現多個接口。
const和readonly有什么區別?
const關鍵字用來聲明編譯時常量,readonly用來聲明運行時常量。
用sealed修飾的類有什么特點
sealed 修飾符用于防止從所修飾的類派生出其它類。如果一個密封類被指定為其他類的基類,則會發生編譯時錯誤。
密封類不能同時為抽象類。
sealed 修飾符主要用于防止非有意的派生,但是它還能促使某些運行時優化。具體說來,由于密封類永
遠不會有任何派生類,所以對密封類的實例的虛擬函數成員的調用可以轉換為非虛擬調用來處理。
虛函數的用法
答:
1)virtual指明一成員函數為虛函數,而virtual僅用于類的定義里,在類外可不加此關鍵字.
2)一個類的成員函數被定義為虛函數時,子類該函數仍保持虛函數特征.
3)子類覆蓋此函數時,定義里可不加virtual關鍵字,但函數聲明要和基類的完全一致!且此聲明是必須的.
4)不是純虛函數時,父類的虛函數必須要實現; 而若將父類的虛函數設定為純虛函數時,子類必需要覆蓋之而且必須要實現之!
解釋virtual、sealed、override和abstract的區別
virtual申明虛方法的關鍵字,說明該方法可以被重寫
sealed說明該類不可被繼承
override重寫基類的方法
abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可實例化。
重載和覆寫有什么區別?
答:重載是方法的名稱相同,不同的參數類型,不同的參數個數,不同的參數順序。覆寫提供了子類中改變父類方法行為的實現(是進行基類中函數的重寫)。
在方法定義中,virtual有什么含義?
答:被virtual修飾的方法可以被子類覆寫
能夠將非靜態的方法覆寫成靜態方法嗎?
答:不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override。
可以覆寫私有的虛方法嗎?
答:不可以,甚至子類中無法訪問父類中的私有方法
能夠阻止某一個類被其他類繼承嗎?
答:可以,使用關鍵字sealed
能夠實現允許某個類別繼承,但不允許其中的某個方法被覆寫嗎?
答:可以,標記這個類為public,并標記這個方法為sealed。
如何區別重載方法?
不同的參數類型,不同的參數個數,不同的參數順序
?
C#中的委托是什么?事件是不是一種委托??????
委托可以把一個方法作為參數代入另一個方法。委托可以理解為指向一個函數的引用。是,是一種特殊的委托
C#中的堆和棧
棧(Stack)由系統管理生存期,存儲代碼執行和調用路徑,執行或調用完畢即從棧中清除;
堆(Heap)中保存值和對象,調用完畢之后依然存在,由垃圾回收器查找棧中有無指向該值或對象的引用,無則從堆中刪除
?
你對泛型了解嗎?簡單說明一下泛型的有什么好處?
泛型:通過參數化類型來實現在同一份代碼上操作多種數據類型。利用“參數化類型”將類型抽象化,從而實現靈活的復用
好處是——類型安全和減少裝箱、拆箱。提高性能、類型安全和質量,減少重復性的編程任務
C#中所有對象共同的基類是什么?
System.Object.
如何在C#中實現繼承?
在類名后加上一個冒號,再加上基類的名稱。
C#支持多重繼承嗎?
不支持??梢杂媒涌趤韺崿F。
被protected修飾的屬性/方法在何處可以訪問?
在繼承或間接繼承與這個類的子類中可以訪問。
私有成員會被繼承么?
會,但是不能被訪問。所以看上去他們似乎是不能被繼承的,但實際上確實被繼承了。
C#提供一個默認的無參構造函數,當我實現了另外一個有一個參數的構造函數時,還想保留這個無參數的構
造函數。這樣我應該寫幾個構造函數?
答:兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,所以需要手動實現那個無參構造
函數。
轉載于:https://www.cnblogs.com/wyj1990/archive/2012/04/11/2441891.html
總結
以上是生活随笔為你收集整理的。net面试题(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT人士,你的知识需要管理。
- 下一篇: bugfree3.0.2版本升级--更新