1. 程式人生 > >【C#】之 類及其方法

【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);