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