C#程序員面試的基礎問答
·在方法定義中,virtual有什麼含意?
被virtual修飾的方法可以被子類覆寫。
·能夠將非靜態的方法覆寫成靜態方法麼?
不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override。
·可以覆寫私有的虛方法麼?
不可以,甚至子類中無法訪問父類中的私有方法。
·能夠阻止某一個類被其他類繼承麼?
可以,使用關鍵字sealed。
·能夠實現允許某個類被繼承,但不允許其中的某個方法被覆寫麼?
可以,標記這個類為public,並標記這個方法為sealed。
·什麼是抽象類(abstract class)?
一種不可以被實例化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法後才能被實例化。
·何時必須聲明一個類為抽象類?
當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。
·接口(interface)是什麼?
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。
·為什麼不能指定接口中方法的修飾符?
接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護沒有意義。他們默認為公有方法。
·可以繼承多個接口麼?
當然。
·那麼如果這些接口中有重復的方法名稱呢?
這種情況中你可以決定如何實現。當然需要特別得小心。但是在編譯環節是沒有問題的。
·接口和抽象類的區別是什麼?
接口中所有方法必須是抽象的,並且不能指定方法的訪問修飾符。抽象類中可以有方法的實現,也可以指定方法的訪問修飾符。
·如何區別重載方法?
不同的參數類型,不同的參數個數,不同的參數順序。
·const和readonly有什麼區別?
const可以用於局部常量,而readonly,實際是類的initonly字段,顯然不能是局部的。
·System.String 和System.StringBuilder有什麼區別?
System.String是不可變的字符串。System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法。