- 相關(guān)推薦
C#基礎(chǔ)的面試試題收集
能夠?qū)⒎庆o態(tài)的方法覆寫成靜態(tài)方法么?
不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override。
可以覆寫私有的虛方法么?
不可以,甚至子類中無(wú)法訪問(wèn)父類中的私有方法。
能夠阻止某一個(gè)類被其他類繼承么?
可以,使用關(guān)鍵字sealed。
能夠?qū)崿F(xiàn)允許某個(gè)類被繼承,但不允許其中的某個(gè)方法被覆寫么?
可以,標(biāo)記這個(gè)類為public,并標(biāo)記這個(gè)方法為sealed。
被virtual修飾的方法可以被子類覆寫。
什么是抽象類(abstract class)?
一種不可以被實(shí)例化的類。抽象類中一般含有抽象方法,當(dāng)然也可有具體實(shí)現(xiàn)。繼承類只有實(shí)現(xiàn)過(guò)所有抽象類的抽象方法后才能被實(shí)例化。
何時(shí)必須聲明一個(gè)類為抽象類?
傳入某個(gè)屬性的set方法的隱含參數(shù)的名稱是什么?
value,它的類型和屬性所聲名的類型相同。
如何在C#中實(shí)現(xiàn)繼承?
在類名后加上一個(gè)冒號(hào),再加上基類的名稱。
C#支持多重繼承么?
類之間不支持,接口之間支持。類對(duì)接口叫做實(shí)現(xiàn),不叫繼承。
被protected修飾的屬性/方法在何處可以訪問(wèn)?
在繼承或間接繼承與這個(gè)類的子類中可以訪問(wèn)。
私有成員會(huì)被繼承么?
會(huì),但是不能被訪問(wèn)。所以看上去他們似乎是不能被繼承的,但實(shí)際上確實(shí)被繼承了。
請(qǐng)描述一下修飾符protected internal。
在同一個(gè)Assembly中,他的訪問(wèn)級(jí)別和public一樣,而跨Assembly訪問(wèn)時(shí),他的訪問(wèn)級(jí)別同protected一樣。即protected的范圍 + internal的范圍。
C#提供一個(gè)默認(rèn)的無(wú)參數(shù)構(gòu)造函數(shù),當(dāng)我實(shí)現(xiàn)了另外一個(gè)有一個(gè)參數(shù)的構(gòu)造函數(shù)時(shí)候,還想保留這個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)。這樣我應(yīng)該寫幾個(gè)構(gòu)造函數(shù)?
兩個(gè),一旦你實(shí)現(xiàn)了一個(gè)構(gòu)造函數(shù),C#就不會(huì)再提供默認(rèn)的構(gòu)造函數(shù)了,所以需要手動(dòng)實(shí)現(xiàn)那個(gè)無(wú)參數(shù)構(gòu)造函數(shù)。
C#中所有對(duì)象共同的基類是什么?
System.Object.
重載和覆寫有什么區(qū)別?
重載提供了對(duì)一個(gè)方法簽名的不同參數(shù)調(diào)用的實(shí)現(xiàn)。覆寫提供了子類中改變父類方法行為的實(shí)現(xiàn)。
在方法定義中,virtual有什么含意?
當(dāng)這個(gè)類中包含抽象方法時(shí),或是該類并沒(méi)有完全實(shí)現(xiàn)父類的抽象方法時(shí)。
接口(interface)是什么?
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實(shí)現(xiàn)。
為什么不能指定接口中方法的修飾符?
接口中的方法用來(lái)定義對(duì)象之間通信的契約,指定接口中的方法為私有或保護(hù)沒(méi)有意義。他們默認(rèn)為公有方法。
可以繼承多個(gè)接口么?
當(dāng)然。
那么如果這些接口中有重復(fù)的方法名稱呢?
這種情況中你可以決定如何實(shí)現(xiàn)。當(dāng)然需要特別得小心。但是在編譯環(huán)節(jié)是沒(méi)有問(wèn)題的。
接口和抽象類的區(qū)別是什么?
接口中所有方法必須是抽象的,并且不能指定方法的訪問(wèn)修飾符。抽象類中可以有方法的實(shí)現(xiàn),也可以指定方法的訪問(wèn)修飾符。
如何區(qū)別重載方法?
不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序。
const和readonly有什么區(qū)別?
const可以用于局部常量,而readonly,實(shí)際是類的initonly字段,顯然不能是局部的。
System.String 和System.StringBuilder有什么區(qū)別?
System.String是不可變的字符串。System.StringBuilder存放了一個(gè)可變的字符串,并提供一些對(duì)這個(gè)字符串修改的方法。