1、什麼是類?
面向對象的語言,最基本的就是類。在C#中,類是這樣來定義的:類代表一組具有公共屬性和行為的對象。
舉個例子,現實生活中,人就是一個“類”,但這只是一個統稱,指所有的人。我們要找個人一起去玩,此時就需要找到一個具體的人。比如我和小紅,我們兩個就是“人”這個類的兩個實例。
2、C#中如何定義一個類?
C#中采用關鍵詞class來定義。
class 類名{}
class前面還可以有訪問修飾符進行修飾。
訪問修飾符 說明 public 公有訪問。不受任何限制。 private 私有訪問。只限於本類成員訪問,子類,實例都不能訪問。 protected 保護訪問。只限於本類和子類訪問,實例不能訪問。 internal 內部訪問。只限於本項目內訪問,其他不能訪問。 protected internal 內部保護訪問。只限於本項目或是子類訪問,其他不能訪問
3、類的成員
類的成員包括字段、屬性、方法和構造函數等。它們與類一樣,都有自己的訪問權限。也可以使用static關鍵字將其聲明為類的靜態成員,注意,靜態成員屬於類級別的概念,不屬於類的實例。
3.1 字段
字段由三個部分組成-訪問修飾符,字段的類型和字段名字。
public class Person
{
private string name;
public int age;
protected bool sex;
}
當然,也可以使用readonly和const來修飾,readonly不需要定義時初始化,可以在構造函數中進行初始化,而const修飾字段也必須定義字段的時候就完成初始化。
類可以用static進行修飾,字段也可以使用static。當字段使用static進行修飾的時候,只能使用 類名.字段名進行訪問。
3.2 屬性
屬性是對字段的擴展
public class Person
{
private string name;
public string Name
{
get{return name;}
set{name=value;}
}
}
屬性定義主要由get訪問器和set訪問器組成。前面有介紹過,屬性中get和set在IL代碼中,是被編譯成兩個方法的。用屬性來包裝字段是因為可以更好的保護字段,可以根據需要加入更多的邏輯控制代碼。當然,屬性也可以使用static關鍵字進行聲明,跟字段是一樣的,屬於類級別,不能通過類的實例進行訪問,也不能在靜態屬性中使用非靜態字段。
3.3 方法
方法=方法簽名+一系列語句的代碼
public class Person
{
public void Print(string name)
{
Console.WriteLine("aaaa");
}
}
方法也可以使用static關鍵字進行修飾,此時的靜態方法也屬於類級別的,不能用過類的實例進行訪問。
關於方法,還有一個很重要的地方,那就是方法重載,方法重載指的是在類中可以定義多個名稱相同但方法簽名不同的方法,這裡的方法簽名不同指的是方法的參數順序、參數類型和個數的不同(Warning:方法的返回值類型不屬於方法簽名的一部分)。
public class Person
{
public void Print(string name){}
public void Print(int age){}
}
3.4 構造函數
構造函數是用於創建類的實例對象的。當調用構造函數創建一個對象時,構造函數會為對象分配內存空間,並初始化類的成員。構造函數分為實例構造函數和靜態構造函數兩種。
(1)實例構造函數
一般在程序中,都是使用new關鍵字來創建對象的。new創建的過程,就是調用實例構造函數,來初始化類中所有的實例成員。
比如上面的Person類,雖沒有顯示寫出實例構造函數,但C#編譯器會幫我們自動生成一個函數體為空的默認午餐的實例構造函數。
構造函數有以下特點:
(2)靜態構造函數
靜態構造函數用於初始化類中的靜態成員,在創建第一個實例或引用任何靜態成員之前,CLR都將自動調用靜態構造函數。
靜態構造函數有以下特點:
3.5 析構函數
析構函數用於在類銷毀之前釋放類實例所使用的托管和非托管資源。析構函數實際上是隱式地調用了基類Object的Finalize方法。
class Person
{
~Person()
{
Console.WriteLine("析構函數被調用了");
}
}
上面的析構函數代碼會被編譯器轉化為下面的代碼:
protected override void Finalize()
{
try{Console.WriteLine("析構函數被調用了");}
finally{base.Finalize();}
}
在定義析構函數時必須要注意以下幾點:
3.6 索引器
索引器的定義類似於屬性,也具有get訪問器和set訪問器。
[修飾符] 數據類型 this[索引類型 index]
{
get{//返回類中數組的某個元素;}
set{//對類中數組元素賦值;}
}
this表示所操作的是對類對象的數組成員
4、類實例化
前面說過了,要得到一個類的實例對象,就必須先聲明一個該類類型的變量,然後使用new運算符後跟類的實例構造函數來完成實例化。類的實例化對象是對類的具體化。
需要注意的是:只有包含實例構造函數的類才能被實例化,而在靜態類中是不能定義實例構造函數的。
5、類與結構體的區別
感覺這篇非常非常的基礎,我也是在想到底要不要寫,後來我決定還是寫下來。萬丈高樓平地起,加上技術更新也快,但有基礎,就可以以不變應萬變了。