Abstract:
abstract方法必須在abstarct類中聲明,沒有默認實現,子類必須實現。
Virtual:
virtual方法可以聲明在abstract類中,也可以聲明在非abstarct類中,並且可以有默認實現。
三、Interface(接口)
接口的一些描述
1. 接口是一個引用類型,通過接口可以實現多重繼承。
2. C#中接口不能有new、public、protected、internal、private等修飾符。
3. 接口中只能聲明"抽象"成員(所以不能直接下一步對接口進行實例化(即不能使用new操作符聲明一個接口的實例對 象)),而不能聲明共有的域或者私有的成員變量。
4. 接口聲明不包括數據成員,只能包含方法、屬性、事件、索引等成員。
5. 接口成員的訪問級別是默認的(默認為public),所以在聲明時不能再為接口成員指定除public外的任何訪問修飾符,否則 編譯器會報錯。
6. 接口成員不能有static、abstract、override、virtual修飾符,使用new修飾符不會報錯,但會給出警告說不需要關鍵字new。
7. 在聲明接口成員的時候,不准為接口成員編寫具體的可執行代碼,也就是說,只要在對接口進行聲明時指明接口的成員名稱和參數就可以了。
8. 接口一旦被繼承,子類需要把接口中所有成員實例化(通過具體的可執行代碼實現接口抽象成員的操作)。
(百度百科:http://baike.baidu.com/link?url=UlmCxkt6O7lqmGK4IdM5CmzwhK3nnEQmA3dCkh9I6-noq3GfVv-chDLIo3QMQYPlEo3Vv8PK8J2e9OidgP8Sta)
接口的意義
1. 接口一個比較常用的用法是聲明一組行為方法,這組行為方法可以有不同的實現和多個實現,而使用這組行為的類也只關心行為的聲明。簡單說就是定義了交互的契約。
2. 面向接口編程,容易對應用系統進行分層,不同層次之間使用接口進行交互。這有以下好處:層次職責清晰;容易做UT;容易解耦(DI,IoC)。
3. 可以實現多重繼承。
左移運算符(<<)
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。
例:a = a << 2 將a的二進制位左移2位,右補0,
左移1位後a = a * 2;
若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。
右移運算符(>>)
將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。
操作數每右移一位,相當於該數除以2。
例如:a = a >> 2 將a的二進制位右移2位,
左補0 or 補1 得看被移數是正還是負。
左移運算符(<<)
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。
例:a = a << 2 將a的二進制位左移2位,右補0,
左移1位後a = a * 2;
若左移時捨棄的高位不包含1,則每左移一位,相當於該數乘以2。
右移運算符(>>)
將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。
操作數每右移一位,相當於該數除以2。
例如:a = a >> 2 將a的二進制位右移2位,
左補0 or 補1 得看被移數是正還是負。