【C#】之 類及其方法
#一、類
##1、什麼是類
在面嚮物件語言的結構化設計中,我們把那些看得見、摸得著、具體的、特指的事物稱作是物件,而類則是對物件的一個抽象化是一個模子,確定物件的型別,確定物件將會擁有的特徵(屬性)和行為(方法)。
類不佔用記憶體,物件佔用記憶體。
//類的宣告
//訪問引數+ class+ 類名
//例如:
public class person //宣告一個person類
{
//欄位、屬性、方法
}
##2、類的例項化
我們說類是一個抽象的概念,他擁有了物件的屬性和方法,那麼物件怎樣才能使用這些屬性和方法呢?這時候就涉及到了類的例項化,將類進行例項化之後,他的屬性和方法才能引用到物件中。
就像是蓋房子,圖紙就相當於類,而房子就是一個物件。我們想要使用房子的“入住”方法,或“人數”屬性,就必須有一個實實在在的房子存在,而不是一個圖紙,所以將圖紙變為房子的過程就是一個例項化。
//類的例項化
//類名+ 例項名 =new 類名();
//例如:
person per = new person(); //例項化這個類
//類成員的訪問(欄位)
per._name = "張三";
per._age = 18;
per._gender = '男';
per.SayHello();
per.walk();
Console.WriteLine(per._name);
Console.ReadKey();
##3、類的成員訪問
欄位、屬性和方法都可以叫做類的成員,類被例項化之後,這些成員可以被物件訪問,他們在定義時會有訪問修飾符(public、private、protected、internal)用來定義訪問的級別,有了訪問的級別就可以控制成員在那些地方可以被訪問,從而達到封裝的目的。
public——公共成員,完全公開,沒有訪問限制
private——私有成員,在類的內部才可以被訪問
protected——保護成員,該類內部和繼承類(子類) 中可以訪問
internal——當前程式集內可以訪問,類的預設訪問修飾符
欄位成員的訪問修飾符一般為private,這樣的話,在其他類中就沒有辦法對這個欄位進行訪問,但是可以通過屬性來給欄位賦值(屬性的訪問修飾符一般為public)。
屬性:
屬性的定義get(讀)、set(寫)
屬性是為了保護與之對應的欄位的,保證對欄位的讀取和賦值符合要求。
屬性可以分為:讀寫、只讀、只寫。
允許外部訪問的變數一定要宣告屬性。
public class person
{
//欄位
private string _name;
//與之對應的屬性
public string Name
{
get { return _name; }//讀
set { _name = value; }//寫
}
}
##4、名稱空間——類的呼叫
在同一名稱空間下,類與類之間可以相互呼叫,如果是在不同名稱空間下的類的引用,可以通過程式碼呼叫實現銜接。
方法:
1、在本類下新增引用,用using匯入需要使用的類所在的名稱空間(專案名),之後呼叫類。
2、在本類下新增引用後,直接填寫程式碼(寫全名)
#二、方法
##1、什麼是方法
方法就是將一堆程式碼進行重用的一種機制,函式就是一段程式碼,這段程式碼可能有輸入的值(引數),可能會有返回值。
一個函式就像一個專門做一件事的人,我們呼叫它做一些事情,他可能需要我們提供一些資料給它,它執行完成後可能會有一些執行結果給我們。要求的資料就叫做引數,返回的執行結果就是返回值。
##2、語法
**位置:**方法一般是寫在主函式的外面,類的裡面。
語法:[訪問修飾符] static 返回值 方法名([引數列表])
例:
Public static void show()
//此方法是無返回值無引數的方法(void 代表無返回值),如果方法前加static叫靜態方法。在本類中呼叫這個方法,可以直接 類名.方法名+();就可以使用。例如類的名稱為program,則可以寫成program.show()。
##3、方法的過載
方法是一個將函式進行重用的一種機制,實現特有的功能,但是當功能非常相似又很多時,我們就可以用方法的過載用來簡化程式碼量。
比如1+2是一個方法1+2+3也是一個方法,1-2是一個放法1-2.5也是一個方法,他們同是加法或同是減法,這樣我們就可以寫一個加法方法過載或減法方法過載,他們之間方法名相同,但引數個數或引數型別可以不同。
說明:
方法名相同,但引數不同或引數的個數不同,返回型別可相同也可不同。
方法的過載和返回值無關,和引數的型別和個數有關。
//方法的過載
public static int addnumber(int num1, int num2)
{
return num1 + num2;
}
public static double addnumber(double num1, int num2)
{
return num1 + num2;
}
public static double addnumber(double num1, double num2)
{
return num1 + num2;
}
public static int addnumber(int num1, int num2,int num3)
{
return num1 + num2;
}
##4、可變陣列——params陣列
在定義方法時,我們需要在()中新增需要傳入的引數,每個引數都需要為其定義資料型別,當傳進來的是一個多種資料型別的陣列時,即多個引數值,我們就可以使用params陣列+object,來接收傳入的內容,params是一個可變陣列,可以讓方法裡面放很多很多引數,而object可以放不同的引數型別(它包含了所有資料型別)。
##5、建構函式
為甚麼會出現?
1、在例項化類之後,當需要訪問的屬性較多時,直接賦值會很麻煩繁瑣,建構函式可以讓類在例項化是直接輸入值,無需進行名稱的賦值操作。
2、一般為了保護類中的屬性,我們會將其屬性變為只讀的,從而使其無法在其他類中更改,保證了本身的安全性。建構函式就提供了這樣一個功能,無法賦值,只能將值寫出後,類進行讀操作。
方法:
//建構函式,函式名是類名。需要例項化才能使用,例項化時括號裡面需要有具體的引數值
public Person (string name,char gender,int age)
{
this._name = name;//this 是指示代詞,將name這個引數賦值給name欄位
this._gender = gender;
this._age = age;
}
//例項化帶有建構函式的類
person p=new person ("小穎",'女',18);