C#面試基礎問題
<b>傳入某個屬性的set</b><b>方法的隐含參數的名稱是什麼?</b>
value,它的類型和屬性所聲名的類型相同。
<b>如何在C#</b><b>中實作繼承?</b>
在類名後加上一個冒号,再加上基類的名稱。
<b>C#</b><b>支援多重繼承麼?</b>
不支援。可以用接口來實作。
<b>被protected</b><b>修飾的屬性/</b><b>方法在何處可以通路?</b>
在繼承或間接繼承與這個類的子類中可以通路。
<b>私有成員會被繼承麼?</b>
會,但是不能被通路。是以看上去他們似乎是不能被繼承的,但實際上确實被繼承了。
<b>請描述一下修飾符protected internal</b><b>。</b>
被protected internal修飾的屬性/方法隻能在它的在同一個程式集(Assembly)中的子類被通路。
<b>C#</b><b>提供一個預設的無參數構造函數,當我實作了另外一個有一個參數的構造函數時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?</b>
兩個,一旦你實作了一個構造函數,C#就不會再提供預設的構造函數了,是以需要手動實作那個無參數構造函數。
<b>C#</b><b>中所有對象共同的基類是什麼?</b>
System.Object.
<b>重載和覆寫有什麼差別?</b>
重載提供了對一個方法簽名的不同參數調用的實作。覆寫提供了子類中改變父類方法行為的實作。
<b>在方法定義中,virtual</b><b>有什麼含意?</b>
被virtual修飾的方法可以被子類覆寫。
<b>能夠将非靜态的方法覆寫成靜态方法麼?</b>
不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一緻,除了将virtual改為override。
<b>可以覆寫私有的虛方法麼?</b>
不可以,甚至子類中無法通路父類中的私有方法。
<b>能夠阻止某一個類被其他類繼承麼?</b>
可以,使用關鍵字sealed。
<b>能夠實作允許某個類被繼承,但不允許其中的某個方法被覆寫麼?</b>
可以,标記這個類為public,并标記這個方法為sealed。
<b>什麼是抽象類(abstract class</b><b>)?</b>
一種不可以被執行個體化的類。抽象類中一般含有抽象方法,當然也可有具體實作。繼承類隻有實作過所有抽象類的抽象方法後才能被執行個體化。
<b>何時必須聲明一個類為抽象類?</b>
當這個類中包含抽象方法時,或是該類并沒有完全實作父類的抽象方法時。
<b>接口(interface</b><b>)是什麼?</b>
隻含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實作。
<b>為什麼不能指定接口中方法的修飾符?</b>
接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護沒有意義。他們預設為公有方法。
<b>可以繼承多個接口麼?</b>
當然。
<b>那麼如果這些接口中有重複的方法名稱呢?</b>
這種情況中你可以決定如何實作。當然需要特别得小心。但是在編譯環節是沒有問題的。
<b>接口和抽象類的差別是什麼?</b>
接口中所有方法必須是抽象的,并且不能指定方法的通路修飾符。抽象類中可以有方法的實作,也可以指定方法的通路修飾符。
<b>如何差別重載方法?</b>
不同的參數類型,不同的參數個數,不同的參數順序。
<b>const</b><b>和readonly</b><b>有什麼差別?</b>
const關鍵字用來聲明編譯時常量,readonly用來聲明運作時常量。
<b>System.String </b><b>和System.StringBuilder</b><b>有什麼差別?</b>
System.String是不可變的字元串。System.StringBuilder存放了一個可變的字元串,并提供一些對這個字元串修改的方法。