第6章講的是型別和成員基礎
重要認知:虛方法
虛方法的設計原則:設計一個型別時,應儘量減少所定義的虛方法的數量。
首先,呼叫虛方法的速度比呼叫非虛方法慢。
其次,JIT編譯器不能內嵌虛方法,這進一步影響了效能。
第三,虛方法使元件的版本控制變得更脆弱。
第四,定義一個基類時,如果希望一些方法是多型的,最好的辦法是使複雜的辦法成為虛方法,簡便的成為非虛方法。
引申到定義類時應遵循的原則:
1. 定義類時,除非確定要將此類作為基類使用,否則總是顯示指定為sealed類;
2. virtual永遠最後才考慮,因為virtual成員會放棄許多控制,喪失獨立性,過於依賴派生類的正確行為;
關於虛方法的程式碼示例:(如果沒有註釋,你"猜對"了嗎?)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CATest101 { public class A { public void MethodF() { Console.WriteLine("A.F"); } public virtual void MethodG() { Console.WriteLine("A.G"); } } public class B : A { new public void MethodF() { Console.WriteLine("B.F"); } public override void MethodG() { Console.WriteLine("B.G"); } } class Program { static void Main(string[] args) { B b; b = new B(); A a = b;//定義A型別的變數a,並指向b物件的例項 a.MethodF(); //輸出A.F b.MethodF(); //輸出B.F a.MethodG(); //輸出B.G b.MethodG(); //輸出B.G } } }
知識點:const靜態常量和readonly動態常量
1)const修飾的常量在宣告的時候必須初始化;readonly修飾的常量則可以延遲到建構函式初始化
2)const修飾的常量在編譯期間就被解析,即常量值被替換成初始化的值;readonly修飾的常量則延遲到執行的時候
此外const常量既可以宣告在類中也可以在函式體內,但是static readonly常量只能宣告在類中。
更對關於const和readonly請看這個連結,我覺得作者講的不錯。