C# 类
C# 類
1,繼承,若基類為帶參構造函數,則子類也必須有帶參構造函數。
若基類有無參和有參構造函數,則基類可以不提供有參構造函數。
2,構造函數可以被重載(在本類中),可以被顯示調用(在構造函數的構造列表中),不能被繼承,不可以在其它任何地方調用。
class CTest
{
//重載------------------------------------------------------
CTest(int x, int y){}
CTest(int x) : this(x, 0) //顯示調用2參的構造
{
}
//------------------------------------------------------------
}
3,構造函數與析構函數都是不可以被繼承的,雖然會被自動調用或在構造列表中手動調用。
4,靜態構造函數
靜態構造函數是C#的一個新特性,當我們想初始化一些靜態變量的時候就需要用到它了。這個構造函數是屬于類的,而不是屬于哪里實例的,就是說這個構造函數只會被執行一次。也就是在創建第一個實例或引用任何靜態成員之前,自動被調用。
5,運算符重載
C#要求所有的運算符重載都聲明為public和static,這表示它們與它們的類或結構相關聯,而不是與實例相關聯
不能被重載的運算符:賦值,?,指針,sizeof,is,typeof,new
賦值運算符包括 =, +=, -=, *=, %=,
?struct CSTest
??? {
??????? public int posx;
??????? public static CSTest operator + (CSTest o1, CSTest o2)
??????? {
??????????? CSTest ost = new CSTest();
??????????? ost.posx = o1.posx + o2.posx;
??????????? return ost;
??????? }
??????? public static CSTest operator - (CSTest ot)
??????? {
??????????? ot.posx = -ot.posx;
??????????? return ot;
??????? }
??? }
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? CSTest ostn1 = new CSTest();
??????????? CSTest ostn2 = new CSTest();
??????????? ostn1.posx = 1;
??????????? ostn2.posx = 2;
??????????? CSTest ostn3 = ostn1 + ostn2;
??????????? ostn3 = -ostn3;
??????????? Console.WriteLine(ostn3.posx);
??????? }
??? }
6,virtual 與 abstract 區別
??? abstract class abclass
??? {
??????? virtual protected void Func() { } //定義虛函數
??????? abstract protected void FFunc();//定義純虛函數
??? }
??? class CA : abclass
??? {
??????? protected override void Func()
??????? {
??????? }
??????? protected override void FFunc()
??????? {
??????? }
??? }
?
?
?
posted on 2016-10-01 18:43 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結