深圳做微信網(wǎng)站百度搜索app免費(fèi)下載
類
類是一個數(shù)據(jù)類型的藍(lán)圖。構(gòu)成類的方法和變量稱為類的成員,對象是類的實例。類的定義規(guī)定了類的對象由什么組成及在這個對象上可執(zhí)行什么操作。
class 類名
{
? ? ? ? (訪問屬性)?成員變量;?
? ? ? ? (訪問屬性) 成員函數(shù);
}
訪問屬性:public(公有的,類中可以直接訪問)?,protected受保護(hù)的? , private私有的(默認(rèn)的)(私有的,其他的類中不可以直接訪問)?
如下類的示例,描述Box的信息(屬性(成員變量)和Box的方法(函數(shù)))?
class Box{public int row = 0;public int col = 0;public int rowBk = 0;public int colBk = 0;//備份public void Backup(){rowBk = row;colBk = col;}//返回備份public void Revert(){row = rowBk;col = colBk;}}
類的使用
?在使用類的成員變量或者函數(shù)時,要先檢查是否在同一個命名空間下,如果不是需要在開頭使用
using + 類所在的命名空間名字
需要先創(chuàng)建一個對象。然后通過對象使用類里面的變量或者方法。
類名 對象名 = new 類名();? ? ? ? //創(chuàng)建對象
對象名.成員變量;? ? ? ? ? ? ? ? ? ? ? ?//引用對象
static void Main(string[] args){Box Box = new Box(); // 聲明 Box1,類型為 BoxBox.row = 5;Box.col = 6;Box.Backup();Console.WriteLine(Box.row + " " + Box.col);Console.WriteLine(Box.rowBk + " " + Box.colBk);Box.row = 10;Box.col = 12;Console.WriteLine(Box.row + " " + Box.col);Console.WriteLine(Box.rowBk + " " + Box.colBk);Box.Revert();Console.WriteLine(Box.row + " " + Box.col);Console.ReadKey();}
構(gòu)造函數(shù)
默認(rèn)構(gòu)造函數(shù)
new一個對象時,會自動調(diào)用構(gòu)造函數(shù),一般用于初始化操作。如果沒有寫構(gòu)造函數(shù),系統(tǒng)會給一個默認(rèn)的空的構(gòu)造函數(shù),我們可以在默認(rèn)構(gòu)造函數(shù)里面對成員變量進(jìn)行賦初始值。
傳參構(gòu)造函數(shù)
當(dāng)在需要創(chuàng)建新的不同的對象的時候,就需要使用傳參構(gòu)造函數(shù)。
class Box{public int row = 0;public int col = 0;public int rowBk = 0;public int colBk = 0;//默認(rèn)構(gòu)造函數(shù)/*public Box(){}*/public Box(){int row = 0;int col = 0;int rowBk = 0;int colBk = 0;}//傳參構(gòu)造函數(shù)public Box(int inRow,int inCol) { row = inRow;col = inCol;rowBk = inRow;colBk = inCol;}}
static void Main(string[] args){Box Box1 = new Box(5, 6); // 聲明 Box1,類型為 BoxBox Box2 = new Box(10, 12); // 聲明 Box2,類型為 BoxConsole.WriteLine(Box1.row + " " + Box1.col);Console.WriteLine(Box2.row + " " + Box2.col);Console.ReadKey();}
靜態(tài)成員
使用?static?關(guān)鍵字把類成員定義為靜態(tài)的。當(dāng)我們聲明一個類成員為靜態(tài)時,意味著無論有多少個類的對象被創(chuàng)建,只會有一個該靜態(tài)成員的副本,它們的值可以通過直接調(diào)用類而不需要創(chuàng)建類的實例來獲取。關(guān)鍵字?static?意味著類中只有一個該成員的實例。
class Test{public int Num1 = 0;public static int Num2 = 0;}internal class Program{static void Main(){Test num1 = new Test();num1.Num1++;//num1.Num2++; //報錯}}
靜態(tài)成員與普通成員的區(qū)別
接下來將對這兩種成員進(jìn)行加1操作,看看他們之間的區(qū)別。
以上示例中發(fā)現(xiàn),靜態(tài)成員不能通過實例化后使用,所以,可以在類中創(chuàng)建相應(yīng)的接口或者方法(函數(shù))來獲取和修改靜態(tài)成員。還可以直接使用 類名.靜態(tài)成員 進(jìn)行調(diào)用。
public void count(){num2++;}public int getNum(){return num2;}
Test.Num2++; //正確寫法
直接讓兩者加1是看不出區(qū)別的,所以,再實例化一個對象出來,在執(zhí)行加1的操作就可以看出兩者的區(qū)別了。
class Test{public int Num1 = 0;public static int Num2 = 0;public void count(){Num2++;}public int getNum(){return Num2;}}internal class Program{static void Main(){Test num1 = new Test();Test num2 = new Test();//普通成員num1.Num1++;num2.Num1++;Console.WriteLine(num1.Num1);Console.WriteLine(num2.Num1);//靜態(tài)成員//通過方法使用靜態(tài)成員num1.count();num2.count();Console.WriteLine(num1.getNum());Console.WriteLine(num2.getNum());//通過 類名.靜態(tài)成員 使用Test.Num2++;Console.WriteLine(Test.Num2);Console.ReadKey();}}
從運(yùn)行結(jié)果中,我們可以看出 Num2 的結(jié)果是2,這就意味著,創(chuàng)建的第二個對象沒有像普通成員那樣重新獲取了一次?Num1?的值?,而是直接獲取了被改變了值以后的 Num2。這說明靜態(tài)成員在對象創(chuàng)建之前就已經(jīng)存在,后面的操作都是直接對同一數(shù)據(jù)進(jìn)行修改,而非修改不同的數(shù)據(jù)。