C#基礎解析之 Ⅴ【封裝】

來源:互聯網
上載者:User

園友們大家好,今天繼續和大家一起探討一下C#語言中的物件導向特性之一---封裝

在C#語言中物件導向有三個特性封裝繼承多態。我們首先來簡單的理解一下物件導向,所謂物件導向就是應用程式開發中的技巧和概念,主要就是一種設計的思路,簡稱OOP技術,物件導向的程式設計語言可以使得複雜的工作條理變的清晰,編寫起來也就容易些,它還具有重用性、靈活性和擴充性。但是,說實話如果具體說物件導向還真說不清楚,就好比你問我什麼是數學。

No.1 物件導向的基礎核心是類和對象。所謂類就是具有相同屬性和行為的對象的集合。比如說:導演是個類,演員是個類,觀眾也是一個類,他們都有相同的屬性和行為,都是抽象類別,都是指一群人。所謂對象就是一切皆為對象,比如說:一台電腦、一個手機、一個蘋果等等都是對象。對象描述了一個物體的特性,抽象一個實際的物體或一個方法。

為了加深印象,我給大家畫了一張圖:

在對象中它的存取修飾詞有四個:public公有許可權、internal程式集保護許可權、protected保護許可權、private私人許可權。類的成員也包括三個:欄位、屬性、方法。欄位是儲存類的資訊資料,大部分欄位是私人的。屬性是為了保護私人欄位,是公有的,其中屬性包括兩個訪問器一個是唯讀屬性get訪問器和唯寫屬性set訪問器。方法是類的行為,就是類要做的事情。

No.2 簡單的瞭解了物件導向,接下來我們就來看一下方法的定義,所謂方法就是行為,也就是要幹什麼事情,對於方法的定義也沒有具體的說法,比較廣泛,一般就是指為了達到某種目的為了獲得某種東西而採取的一種手段或者行為方式。

我們來下一個簡單的方法調用的例子:

建立類:

 1 class Regisseur //演員類
2 {
3 string name;
4 public string Name
5 {
6 get { return name; }
7 set { name = value; }
8 }
9 //選擇電影名稱的方法,參數movieName是電影名稱
10 public void SelectMovieName(string movieName)
11 {
12 Console.WriteLine("導演:" + name + "拍攝" + movieName + "精彩電影");
13 }
14 }

在Main方法中調用類的方法:

 1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Regisseur r = new Regisseur();//執行個體化對象
6 r.Name = "徐克";//調用屬性賦值
7 r.SelectMovieName("《龍門飛甲》");//調用方法選電影名稱
8 Console.ReadKey();
9 }
10 }

運行結果:

來看一下定義類的方法的文法:

存取修飾詞 傳回型別 方法名(參數列表)
{
  方法主體;
}

我來簡單的解釋一下,這個傳回型別就是資料類型,表示調用完這個方法之後可以得到一個值。如果不傳回值得話,那麼這個類型就是void,

比如:private string Qingpingguo(string n) 返回字串   傳回值用關鍵字“return” 返回

   public void Qingpingguo(string n)不返回任何值

方法名就是給方法取個名稱,要注意的是在取名字的時候第一個字母要大寫。

參數列表就是在調用方法的時候可以通過參數給方法傳遞資料,方法根據不同的參數產生不同的結果。

不如:private string  Qingpingguo(string n)參數是一個,字串類型

   private void Qingpingguo(int i,string n)參數兩個,int 和字串

方法的主體就是這個方法要做的功能。

No.3 在方法的定義中有一種方法叫靜態方法,靜態方法就是可以不用執行個體化對象,然後直接調用,文法如下:

存取修飾詞 static 傳回型別 方法名(參數列表)
{
  方法主體
}

靜態方法相比普通方法來說比較簡單,尤其是在調用的時候,雖然結果都是一樣的,但是,我不推薦大家用靜態方法,為什嗎?因為被static關鍵字修飾的靜態屬性和方法都是在程式開始啟動並執行時候就建立了,一直到程式結束才消失,它浪費了很多的資源,所以希望大家在沒有必要的情況下還是不要用靜態方法。

No.4 方法的重載

方法的重載就是方法的名稱相同,方法的參數類型不同或者參數的數量不同

例子:

 1 class Regisseur 
2 {
3 public void Qingpingguo(string title, string player)//兩個參數
4 {
5 Console.WriteLine("電影名字:" + title);
6 Console.WriteLine("主演:" + player);
7 }
8 public void Qingpingguo(string title, string player, string player1)//三個參數
9 {
10 Console.WriteLine("電影名字:" + title);
11 Console.WriteLine("主演:" + player+"和"+player1);
12 }
13 }

在Main方法中調用重載方法

1 static void Main(string[] args)
2 {
3 Regisseur r = new Regisseur();//執行個體化對象
4 r.Qingpingguo("《龍門飛甲》", "李連杰");//調用兩個參數的方法
5 r.Qingpingguo("《龍門飛甲》", "李連杰","周迅");//重載方法,調用三個參數的方法
6 Console.ReadKey();
7 }
8

運行結果:

這個方法的重載比較簡單,我也就不做過多說明了,要注意一點的是方法的傳回型別不同不叫做重載。
No.5 構造方法

構造方法的作用就是在執行個體化對象時可以給屬性賦值,這樣可以簡單化我們的代碼,它的特殊之處就是方法名稱和類名相同,並且沒有傳回型別,而且構造方法一般用public存取修飾詞。如果類裡面沒有定義好的構造方法,在編譯器裡會自動建立一個無參數的構造方法,這個構造方法就好似隱式構造方法,我們自己寫的那個方法叫顯式構造方法,在隱式構造方法中編譯器會自動給欄位賦值。對於構造方法相對比較簡單一些,我們就不深究了。

No.6 參數傳遞

參數的傳遞分為,值傳遞和引用傳遞,對於值傳遞我想大家一看字面意思就會明白的。所以還是直接逃到引用傳遞吧!

在引用傳遞我們要注意一個關鍵字“ref”在定義方法時,引用傳遞的參數前必須加關鍵字ref,比如:static string qingpingguo(ref string name){} 還有就是在傳遞參數前必須賦值。我們來看一下:

 1 class Program
2 {
3 static void Main(string[] args)
4 {
5 string n = "";
6 string m=qingpingguo(ref n);//調用方法值傳遞
7 Console.WriteLine(m);//輸出傳回值
8 Console.WriteLine("部落格園裡有"+n);//輸出參數的值
9 Console.ReadKey();
10 }
11 static string qingpingguo(ref string name)
12 {
13 name="青苹果";
14 Console.WriteLine("我喜歡青苹果");
15 return "返回";
16 }
17 }

運行結果:

在這裡要注意的是值傳遞傳遞的是參數的複製品,不是它本身;引用傳遞傳遞的是參數本身。在剛才我們所說的關鍵字ref,還有一個是和它對應的就是out,當控制傳遞迴調用方法時,在方法中對參數所做的任何更改都將反映在該變數中。 當希望方法返回多個值時,聲明 out 方法非常有用。使用 out 參數的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數。 若要使用 out 參數,必須將參數作為 out 參數顯式傳遞到方法。簡單的說他們兩個的區別是ref要求參數在傳遞給函數前要初始化,而out就不需要,out是在方法中對其完成初始化,它是常見於平台叫用中。out適用在需要return多個傳回值得地方,而ref則用在需要被調用的方法修改調用者的引用的時候。

總結:1.物件導向的類和方法;

   2.方法的定義;

   3.靜態方法;

   4.方法的重載;

   5.構造方法;

   6.參數傳遞;

The end!

此文是本人的個人觀點,如有不完善或者不準確的地方,歡迎高手進行批評,老鳥進行指點。

作者:青苹果
座右銘:不斷的反省自己!然後加以改變!
感興趣的技術:.NET、資料庫、JavaScript、C#、ajax、winform、jquery、extjs
本文出處:http://www.cnblogs.com/xinchun/
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.