C#物件導向(一)

來源:互聯網
上載者:User

標籤:style   blog   color   ar   檔案   sp   資料   div   art   

一:物件導向的基本知識

C#程式分為面向過程和物件導向

什麼是對象:一切皆為對象:Object,生活中常說的“東西”就是程式裡面所指的對象;生活中遇到的東西我們都在下意識的歸類;歸類意味著抽象模型;

類:class,對某類眾多個物件的共同特點抽象出來的模型。

他們的關係:類是好多個物件的抽象,對象是類的執行個體化。

建立一個名為Dog的類:

 class Dog  //一般首字母大寫    {       int age;       public void setage(int a) //用方法賦值        {           age = a;        }       public void buck()        {            Console.WriteLine("這是一個方法");        }    }

類中一般包括兩類東西,變數(名詞,也交成員變數這裡age是成員變數)和函數(動詞,也叫成員函數或成員方法 buck()就是方法)。

對象執行個體化:

Dog d1 = new Dog();

這樣就執行個體化出了一個Dog的對象a。

例子:兩個套在一起的圓,求內圓的周長和內圓與外圓之間的面積,用物件導向的思想做

class circle    {        float r;        public circle(float a)        {            r = a;        }        public double zhouchang()        {            return 2 * 3.14 * r;        }        public double mianji()        {            return 3.14 * r * r;        }    }    class Program    {        static void Main(string[] args)        {            circle m = new circle(10);            circle n = new circle(20);            double bc = m.zhouchang();            double mj = (n.mianji()-m.mianji());            Console.WriteLine("內圓的周長為:"+bc);            Console.WriteLine("花磚的面積為:"+mj);        }    }

首先做了一個名為circle的類,它可以生產任何一個半徑不同的圓,在建構函式中,為半徑賦值。

 

二:物件導向的三大特性

三大特性是指:封裝,繼承,多態。

類中的方法一般分為:構造方法(函數);屬性方法(函數):成員變數賦值取值;行為方法(函數):變數運算。

1. 封裝

封裝含義:

(1)不同類的變數只屬於各自的類。

(2)不同對象的成員變數只屬於各自的對象,彼此不受影響。

      (3)對象中的變數需要通過方法(函數)實現操作,比較安全。

封裝為了安全,盡量不用public來聲明變數,避免在main函數中可以直接存取賦值而降低了安全性,在類中建立public的方法來賦值,main中調用此方法傳值。

2. 成員變數及訪問修飾

private 私人成員 ,protected 受保護的成員,public 公有成員

3. 建構函式

它是一個特殊的成員函數,一般在建構函式裡進行初始化。如果不寫建構函式在new的時候會自動產生一個預設空的建構函式。

寫法特殊:沒有傳回值,函數名只能與類名一樣;public 類名(){};

執行特殊:類在執行個體化(new出來的時候)自動執行,建構函式是最早執行的成員函數,建構函式是用來產生對象的函數。

它的主要作用:對象執行個體化產生的時候,做一些初始化的工作。

下面例子就是做了一個Ren()的建構函式,為其變數賦上初始化的值:

 class Ren    {        string _Name;        int _Age;        public Ren()        {            _Name = "龍神";            _Age = 25;        }    }

4. 重載(函數或方法)

函數名相同,參數不同(參數個數或類型不同)的多個函數就形成了重載。

重載只與函數名和形參有關,與傳回型別無關。

下面舉個例子,建構函式的重載:

    class Ren()        {            string _Name;            int _Age;            public Ren()            {                _Name = "ZSMJ";                _Age = 25;            }            public Ren(string name)            {                _Name = name;            }            public Ren(string name,int age)            {                _Name = name;                _Age = age;            }        }

這樣Ren類中就做了三個建構函式,第一個是無參的,第二個是一個string類型的參數,第三個是兩個參數,類型分別為string和int。他們符合重載的條件,所以會形成重載在Main函數中new的時候根據參數的不同會自動選擇執行其中一個建構函式。

如果在Main函數中:

Ren a = new Ren("王大鎚");

則執行的建構函式是第二個。

5.  屬性

它的聲明:public 類型 屬性名稱;也可以選擇成員變數右鍵重構,封裝欄位來產生屬性方法,例如:

    string _Name;    public string Name   {      get { return _Name; }      set { _Name = value; }   }

這樣Name就是該類的一個屬性,在Main函數中可以用此屬性為其成員變數賦值取值:

     Ren a = new Ren("王大鎚");     a.Name = "王尼瑪";

注意:(1)屬性是用來為成員變數賦值和取值的,它有代替屬性方法的作用,一般用屬性。

(2)屬性定義的時候,屬性名稱後面沒有小括弧。

(3)屬性都是public。

(4)屬性中只能包含兩個部分:get和set。代碼也只能寫在get和set的花括弧裡面。

(5)屬性分為唯讀屬性,唯寫屬性和可讀寫屬性,與get和set的有無有關係。

6. this關鍵字

概念:this引用,this在哪個對象裡面執行代表該對象本身。

用法:this.成員變數(成員方法),this._Name; this.Eat();

例子:this 調用當前對象的其它建構函式。

  public class Mydate    {        int _Year;        int _Month;        int _Day;        int _Hours;       public Mydate(int year,int month)        {           _Year = year;           _Month = month;       }       public Mydate(int year,int month,int day,int hours): this(year,month)       {           _Day = day;           _Hours = hours;       }    }

這裡第一個建構函式中有兩個參數year和month,在做第二個建構函式的時候為了方便用“:this”來調用了本類中第一個建構函式,這樣第二個建構函式只需寫後day和hours的執行語句就可以了。

在new的時候傳入不同的參數,會執行個體出不同的對象,這時候的this就代表不同的對象。

7. is關鍵字(運算子)

用法:對象 is 類名;is左邊是對象,右邊是類型;

 Console.WriteLine(a is Ren);

如果a是一個Ren類的對象,則傳回值為true,否則傳回值為false。

8. partial關鍵字

如果一個類特別大,不宜擋在一個檔案中實現或者一個類中有一部分代碼不宜與其他混淆或者需要多人合作編寫一個類,這就需要將一個類拆開來寫。

用partial關鍵字可以實現,也可以用來補充完善類,擴充性比較強。 如在程式集裡的一個檔案裡寫了 partial class Ren{裡面是成員} ; 在另一個檔案裡也可以對Ren類進行補充,需要這樣寫 partial class Ren{裡面是成員} 。 9. 靜態成員

非靜態變數稱為執行個體變數,非靜態方法稱為執行個體方法,執行個體成員的資料存在每個對象中,用對象名來調用。

靜態成員包括:靜態變數,靜態屬性,靜態方法。

定義一個成員為靜態:在變數或方法前加static,如:static int a;

靜態變數是屬於類的,每個對象都有的並且相同的東西只儲存一份,不和執行個體變數那樣在每個對象裡都面儲存一份。

可以說它不屬於任何對象,也可以說它又屬於任何一個對象,給每個對象用,節省空間的。

例如:每包粉筆的顏色是靜態成員,每支粉筆的剩餘長度是執行個體成員。

靜態變數或方法不需要new出來。

在C#中,定義了一個粉筆的類:

   class Fenbi   {       static string _Color;    public static string Color    {      get { return Fenbi._Color; }      set { Fenbi._Color = value; }    }       int _Lenght;    public int Lenght    {      get { return _Lenght; }      set { _Lenght = value; }    }     }

(1)在當前類的花括弧外,靜態成員只能用類名來調用,不能用對象名來調用,而執行個體成員只能用對象名來調用,不能用類名來調用。

      Fenbi.Color ="Yellow";      Fenbi b = new Fenbi();      b.Lenght = 10;

(2)在當前類的花括弧內,靜態方法只能直接調用靜態成員,不能調用非靜態成員,執行個體方法可以調用非靜態和靜態成員。

     public static void xiezi()       {           Console.WriteLine("寫出"+_Color+"的文字了");       }
     public void change()        {            Console.WriteLine(_Color+"的粉筆長度變為:"+_Lenght);         }

10.  拷貝

淺拷貝:傳遞引用,不賦值對象。
深拷貝:建立一個新的對象。

     

 

C#物件導向(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.