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