C#物件導向(初級)

來源:互聯網
上載者:User

標籤:shape   記憶體回收   紅色   結果   logs   比較   記憶體回收行程   http   瞭解   

 

一、物件導向:建立一個對象,這個對象最終會幫你實現你的需求,儘管其中的過程非常曲折艱難。這也就是所謂的“你辦事我放心”。

例如:

物件導向:摺紙

爸爸開心地用紙折成了一個紙鶴;

媽媽不開心地用紙折成了一隻小豬;

妹妹把紙變成了一朵玫瑰花。

紙作為一個對象,可以被折成紙鶴,小豬和玫瑰花,而不用關心是誰怎樣折出來的。

 

物件導向三大特徵:封裝、繼承、多態。

 

 

二、對象:現實中存在的事物,本質是類的執行個體,存在棧的一個變數。可以通過對象的屬性(特徵)和方法(行為)來描述這個對象。

例如:

藍色妖姬這個對象

中文學名(屬性):玫瑰花(屬性值)

科(屬性):薔薇科(屬性值)

顏色(屬性):藍色(屬性值)

方法(行為):藍色妖姬性喜陽光,耐寒、耐旱,適應性較強。

對象的初始化:建立好一個類的對象後,為這個對象的屬性賦值的過程。

 

 

三、類:把具有相同屬性和相同方法的對象進一步封裝從而抽象出來的概念。類是個模型,根據類建立出來對象,並確定了對象應該具有的屬性和方法。

文法:

[public] class 類名

{

  欄位;//欄位的命名一般在前加底線,如_name

  屬性;

  方法;

}

 

1、類的執行個體化:建立這個類的對象的過程。其中類是不佔記憶體而對象是占記憶體的。

例如:

//定義一個水果類

    public class Fruit
    {
        //欄位:儲存資料
        string _name; //水果的名字
        string _shape;//形狀
        string _color;//顏色
        double _weight;//重量
        //方法
        public void output()//輸出水果的資料
        {
            Console.WriteLine("{0}是{1}形的,顏色是{2}色,平均重量為{3}克。", this._name, this._shape, this._color, this._weight);
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Fruit apple = new Fruit();  //類的執行個體化
            apple._name = "蘋果";
            apple._shape = "圓";
            apple._color = "無";
            apple._weight = 250;

            apple.output();
            Console.ReadKey();
         }
    }  //輸出結果:蘋果是圓形的,顏色是紅色,平均重量為250克。

 

2、屬性:對欄位進行再處理,限定對欄位的賦值和取值,不讓外界輕易訪問到欄位,以達到保護欄位的作用。所以一般屬性是public而欄位是private的,讓欄位只能在當前類訪問。欄位是不儲存資料的,因為它會把資料返回給欄位。

1)屬性的本質就是兩個方法,一個是get(),用來取值;一個是set(),用來賦值。

例如:

//把上面的水果類加入屬性對欄位進行保護

 public class Fruit
    {
        //欄位
        string _name;
        //屬性
        public string Name
        {
            get { return _name; } //當輸出屬性值時,執行get方法。當對get()操作時,對欄位的值操作,因為此時欄位已被賦值。
            set { _name = value; } //當給屬性賦值時,首先執行set方法。當對set()操作時,應對value操作。
        }
        string _shape;
        public string Shape
        {
            get { return _shape; }
            set { _shape = value; }
        }
        string _color;
        public string Color    //當水果的顏色輸入為無的時候,限定_color的值為紅
        {
            get { return _color; }
            set {
                if (value == "無")
                {
                    value = "紅";
                }
                _color = value;
            }
        }
        double _weight;
        public double Weight  //當水果的重量輸入小於0時,限定_weight的值為10
        {
            get {
                if (_weight < 0)
                {
                    return _weight = 10;
                }
                return _weight;
            }
            set { _weight = value; }
        }
        //方法
        public void output()
        {
            Console.WriteLine("{0}是{1}形的,顏色是{2}色,平均重量為{3}克。", this.Name, this.Shape, this.Color, this.Weight); //當有屬性時,訪問的是屬性而不是欄位,可以與上一個例子進行比較
        }

    }

    class Program
    {
         static void Main(string[] args)
        {
            Fruit apple = new Fruit("蘋果", "圓", "無", 250); //執行個體化對象
            apple.Name = "蘋果"; //訪問的是屬性,此時欄位已被保護
            apple.Shape = "圓";
            apple.Color = "無";
            apple.Weight = 250;

            apple.output();
            Console.ReadKey();
         }
    }//輸出結果:蘋果是圓形的,顏色是紅色,平均重量為250克。

2)因為屬性不一定都有get()和set()這兩種方法,所以又分為:

a、可讀可寫屬性:既有get()又有set()。

b、唯讀屬性:只有get()。

c、唯寫屬性:只有set()。

 

3、靜態類和非靜態

靜態類:當你想要把你的類當作工具類去使用,也就是會經常使用時,比如說console類。

1)靜態類中只允許有靜態成員,不能訪問執行個體成員;

2)調用靜態成員是,通過類名.靜態成員來訪問,調用簡單,不用建立對象;

3)靜態類在整個項目中實現資源共用,因為靜態儲存地區誰都可以訪問;

4)當全部運行程式都結束的時候,靜態類才會釋放資源。因為存在記憶體回收行程(GC)。

非靜態類:

1)非靜態類中既可以有執行個體成員,又可以有靜態成員;

2)調用執行個體成員時,通過對象名.執行個體成員來訪問;

3)執行個體化可以自動銷毀。

 

4、建構函式:是一種特殊的方法,用來建立對象,可以在函數中對對象進行初始化,也就是給對象的每個屬性依次賦值。

1)建構函式的名稱要跟類的名稱一樣,修飾符必須是public;

2)建構函式沒有傳回值;

3)建構函式可以進行重載;

4)建立對象時執行建構函式;

5)類中會有個預設的無參數的建構函式,當寫了個新的建構函式時,預設的會被替代。

例如:

    public class Fruit
    {
        //欄位
        string _name;
        //屬性
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        string _shape;
        public string Shape
        {
            get { return _shape; }
            set { _shape = value; }
        }
        string _color;
        public string Color
        {
            get { return _color; }
            set {
                if (value == "無")
                {
                    value = "紅";
                }
                _color = value;
            }
        }
        double _weight;
        public double Weight
        {
            get {
                if (_weight < 0)
                {
                    return _weight = 10;
                }
                return _weight;
            }
            set { _weight = value; }
        }

        //建構函式
        public Fruit(string name, string share, string color, double weight)
        {
            this.Name = name;
            this.Shape = share;
            this.Color = color;
            this.Weight = weight;
        }
        //建構函式的重載
        public Fruit(string name, string share):this(name ,share , "" ,0)  //通過:this()調用本類的建構函式
        {

        }
        //方法
        public void output()
        {
            Console.WriteLine("{0}是{1}形的,顏色是{2}色,平均重量為{3}克。", this.Name, this.Shape, this.Color, this.Weight);
        }

    }

    class Program
    {
         static void Main(string[] args)
        {
            Fruit apple = new Fruit("蘋果", "圓");//調用重載建構函式
            //Fruit apple = new Fruit("蘋果", "圓", "無", 250); //調用建構函式,想讓大家瞭解建構函式的重載所以先注釋掉

            apple.output();
            Console.ReadKey();
         }
    }//輸出結果:蘋果是圓形的,顏色是色,平均重量為克。(注意這個是重載建構函式)

 

5、解構函式

1)命名跟類名一樣;

2)當程式結束時進行,可以協助我們馬上釋放資源(釋放對象);

3)不帶修飾符或參數;

4)不能被調用,它是被動被編譯器調用的;

5)一個類只能有一個解構器,不能被重載或是繼承(這點跟建構函式不同);

文法:

~class()

{

  // Cleaning up code goes here

}

 

6、關鍵字new

1)在記憶體中開闢一塊空間;

2)在記憶體空間建立對象;

3)調用對象的建構函式對對象進行初始化(也因此建構函式的修飾符必須是public)。

 

7、關鍵字this

1)代表當前類的對象;

2)在類中顯示調用本類的建構函式,文法  :this()。

 

參考網址:http://www.cnblogs.com/paper/archive/2009/07/31/1535998.html

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.