本博文為半摘記性質
——
聲明:本文内容系網際網路整理收集,内容有改動。主要參考資料:
https://www.runoob.com/csharp/csharp-tutorial.html 菜鳥教程
https://docs.microsoft.com/zh-cn/dotnet/csharp/ Microsoft C#文檔
零散的資料在每章節末尾給出。
————
類描述了一組有相同屬性和相同方法的對象。
0類的成員
類的成員如下圖所示:
本文主講字段、方法和屬性。
1方法
一個方法是把一些相關的語句組織在一起,用來執行一個任務的語句塊。每一個 C# 程式至少有一個帶有 Main 方法的類,要使用一個方法,需要定義方法并調用方法。
方法的定義模闆:
<Access Specifier> <Return Type> <Method Name>(Parameter List)//通路修飾符;傳回類型;方法名稱;參數清單
{
Method Body//方法主體
} //template
——
class Shape//定義類
{
public void setWidth(int w)//定義方法
{
width = w;
}
} //example
方法可以用通路修飾符進行封裝。(詳見【字段】章節)
main方法
定義格式:
tatic void Main(string[] args)
{
...
}
string[ ] args 指的就是你在指令視窗輸入的參數,也就是指令行參數。
函數與方法的關系
方法在某種程度上相當于C語言的函數。但在正式的c#術語中區分函數和方法。在c#術語中,“函數成員”不僅包含方法,也包含類或結構的一些非資料成員,如索引器、運算符、構造函數和析構函數等,甚至還有屬性。這些都不是資料成員,字段、常量和事件才是資料成員。
方法一般不傳回資料,而函數通常都傳回資料。現在一般不區分兩者,統一叫方法。
2構造函數
- 構造函數不能被直接調用,必須通過new運算符在建立對象時才會自動調用;
- 一個類可以有多個構造函數(構造函數的重載)。
- 構造函數必須存在。如果沒有為類提供構造函數,則 C# 将預設建立一個構造函數,該函數會執行個體化對象并将成員變量設定為預設值。
類的 構造函數 是類的一個特殊的成員函數,是一種特殊的方法,主要用來在建立對象時初始化對象(為新對象的成員變量賦初始值),總與new運算符一起使用對該類進行執行個體化( 執行個體化對象就是調用合适的構造函數進行類的執行個體化)。
構造函數的名稱與類的名稱完全相同,它沒有任何傳回類型。 預設的構造函數沒有任何參數。帶有參數的構造函數叫做參數化構造函數,可以在建立對象的同時給對象賦初始值。
class Chinar
{
private int a = 1;
private int b = 1;
private string c = "Chinar";
private object d = 666;
//構造函數用來完成 —— 初始化工作
public Chinar() //聲明構造函數,函數名與類名相同
{
//每個類,本身預設有一個。如果我們不寫明這個 public Chinar()函數,系統僅調用系統預設的。
//自定義構造 public Chinar()函數後,系統隻會調用自定義的 Chinar()
}
——————
//這是一個多參數的構造函數
public Chinar(int a, int b, string c, object d)
{
...
}
}
new 運算符:用于建立對象和調用構造函數(即類的執行個體化),格式為:
類 執行個體名 = new 類();
例:Shape sha = new Shape();
3字段
字段又稱為“成員變量”,一般用在一個類内部做資料互動使用,通常使用private修飾。
字段的資料類型有:
通路修飾符有:
public:所有對象都可以通路;
private:對象本身在對象内部可以通路;
protected:隻有該類對象及其子類對象可以通路
internal:同一個程式集的對象可以通路;
protected internal:通路限于目前程式集或派生自包含類的類型。
執行個體:
class Shape//定義類
{
public void setWidth(int w)//定義方法
{
width = w;
}
protected int width;//定義字段(成員變量)
protected int height;
}
4屬性
屬性是 C# 中的一等公民。
屬性屬于進階概念,在OOP(面向對象)中,主要使用屬性來描述對象的靜态特征(即屬性是對象的一個特征)。屬性一般采用public修飾。
屬性(Property) 是類(class)、結構(structure)和接口(interface)的命名(named)成員。
類或結構中的成員變量或方法稱為 域(Field)。屬性(Property)是域(Field)的擴充,且可使用相同的文法來通路。它們使用 通路器(accessors) 讓私有域的值可被讀寫或操作。通路器聲明可包含一個 get 通路器、一個 set 通路器,或者同時包含二者。
老式屬性聲明格式
屬性的定義格式(舉例):
// 聲明類型為 string 的 Code 屬性
public string Code
{
get//讀私有域
{
return code;
}
set//寫私有域
{
code = value;
}
}
使用格式為:
// 建立一個新的 Student 對象
Student s = new Student();
s.Code = "001";
新式屬性聲明格式
屬性可以被編譯器自動實作。
當屬性通路器中不需要任何其他邏輯時,我們可以使用自動實作的屬性,它會使屬性聲明更加簡潔。自動實作的屬性在編譯後,也是生成了老式的讀/寫屬性。
鍵入“prop”連按兩次“Tab”,可自動快速生成。
屬性和字段的差別
C#屬性是字段的擴充
屬性是類或對象中的一種智能字段形式。 從對象外部,它們看起來像對象中的字段。 但是,屬性可以通過豐富的 C# 功能來實作。
通路屬性時,其行為類似于字段。 但與字段不同的是,屬性通過通路器實作。