《C#進階編程》【第三章】對象和類型 -- 學習筆記

來源:互聯網
上載者:User

標籤:c#   物件導向   對象   類   編程   

        在看過C++之後,再看C#的物件導向感覺就不難了,只是有一些區別而已。

1、類定義

        使用class關鍵字來聲明類,其和C++不同的地方是在大括弧之後不需要冒號

class 類名{    //類的內部} //C++這裡有一個冒號,而C#沒有

2、類成員

3、欄位與屬性

       首先我們先區分一下C#資料成員中的欄位、常量與事件成員。欄位、常量是與類的相關變數。事件是類的成員,在發生某些行為時(如:改變類的欄位或屬性,或進行某種形式的使用者互動操作),它可以讓對象通知調用方。

那麼現在我們在來看看欄位與屬性,屬性的定義如下:

[存取權限] [類型] [屬性名稱]{    //get和set前訪問屬性預設為public    get    {        return [該屬性對應的欄位];    }    set    {        //作你想對該欄位進行的操作    }}

下面我們來看看,執行個體,順便瞭解一下get和set的原理

【C#】

class Test{    private int num;    public int Num    {        public get        {            return num;        }        public set        {            num = value;        }    }}

【C++】

class Test{    private int num;    public int getNum()    {        return num;    }    public void setNum(int value)    {        num = value;    }}

不知道你發現了沒有,在C#中,將getNum這個函數做成了get,setNum做成了set,將set得到的值用value儲存。其實說白了,屬性就是可以對某一欄位進行讀取和賦值操作的方法。但是調用的時候就不需要方法名稱後的括弧。就以上面的代碼為例:   Test.Num   。只要這樣就可以調用他了。

4、方法

      其實這個和就是成員函數,不過在C#中成員函數的範圍更廣。現在我們來看看

<1>方法的定義

[訪問屬性] [傳回值類型] 方法名稱([參數]){    //方法內部實現}

舉個例子:

class Test{    private int a,b;    public int Add()    {        return a + b;    }}

<2>調用方法:

using System;namespace MyFirstProgram{    class Program    {        class Test        {            private int a,b;            public int Add()            {                return a + b;            }        }        static void Main()        {            Test p = new Test();            p.Add(); //對方法的調用        }    }}

<3>給方法傳遞參數

       這個就和普通的函數傳遞參數是一樣的。在C#中,特別注意,除非特別聲明,否則參考型別均為引用傳遞,值類型均為值傳遞。

<4>選擇性參數

       其實這個就是C++中的預設值

<5> ref 與 out 參數

      值傳遞的類型是預設的,但是有些時候我們需要對他進行改變。這時就出現了 ref 與 out。

public void Add(ref int b){    b++;}

調用時還需要添加ref關鍵字

p.Add(ref i);

其實這就和C++中的引用機制一樣,不同的是,在C#中 ref 必須 要使用賦過值的變數。然而out為首碼時,變數可以不初始化。

特別注意:ref 與 out 的 參數不能帶有預設值:

public void Add(ref int b = 2)  //錯誤,對其進行預設值,所以不能用ref或out{    b++;}

<6>無序傳遞

     這個機制,在C++中沒有。不過覺得貌似也沒什麼用

//函數string setName(string FName,string LName){    return FName + " " + LName;}//正常調用setName("John","Doe");//無序調用setName(LName: "Doe", FName: "John");
兩種調用得到的結果是一致的。

5、建構函式

建構函式是在建立對象時,對對象資料初始化的方法。其方法名稱與類名相同,且沒有傳回型別。如果沒有寫的話,編譯器會自動建立一個無參建構函式,將所有的資料初始化為標準的預設值。

class Test{    //只要建立了無參建構函式,後台將不會自動產生建構函式    public Test()     {        //建構函式實現    }    //重寫建構函式    public Test(int Number)    {        //建構函式內部實現    }}

C#還有一個特性是可以給類編寫無參數的建構函式,編寫靜態建構函式的原因就是,類內部有一些靜態欄位和屬性,需要在第一次使用類之前初始化。注意:靜態建構函式至多隻運行一次。

6、匿名型別

     由關鍵字var聲明,其隱式類型化的變數。其實我覺得這個就相當於一個沒有名稱的類一樣。這個感覺並不好用,所以還是慎用。聲明如下:

如果一個對象包含一個人的姓名。

var person = new { FirstName = "John", LastName = "Doe" };

7、部分類

使用 partial 關鍵字可以將類、結構方法或借口放在多個檔案中,通常一個類在一個檔案中,但是在多人開發的時候就可以體現出partial的威力了。

8、弱引用

這個機制,是為了節約記憶體。因為當程式執行個體化一個類或結構時,只要有代碼引用就會,形成強引用(相對弱引用而言)。如果這個類十分巨大,且不經常訪問。那麼就會浪費大量的記憶體,所以就引入了弱引用的概念。弱引用是使用WeakReference 類建立的。因為對象隨時可能被回收所以在引用該對象時必須先確認它的存在。

static void Main(){    WeakReference TestReference = new WeakReference(new Test());    Test tmp;    //IsAlive這個屬性的目的就是TestReference的對象被回收了沒有    if (TestReference.IsAlive)    {        //如果類對象存在,那就引用該對象        tmp = TestReference.Target as Test;    }}

9、靜態類

靜態類的內部只用靜態方法和屬性。靜態類在功能上與 使用私人靜態建構函式建立的類相同。注意:靜態類不能建立執行個體。

反之我們可以使用static關鍵字檢查是否建立了該類的執行個體,如果是編譯器就會報錯。

10、類(class)與結構(struct)的區別

     ①類可以繼承,然而結構不能

     ②類儲存在託管堆上,然而結構儲存在棧上(所以結構儲存效率優於

     ③類是參考型別,而結構是值類型

     ④原則結構的預設無參建構函式不可替換,但是如果將無參建構函式重寫是對全體資料成員進行賦值的話,那麼就可以重寫

11、唯讀欄位與常量的區別

唯讀屬性有readonly聲明。常量概念就是包含一個不可修改的變數。但是有時候需要一些變數其值不能改變,但運行之前是未知的。所以我們就引入了唯讀屬性。唯讀屬性比const靈活很多,readonly可以再建構函式中給其賦值,所以說每個執行個體都可以有不同的值。

12、typeof的使用

typeof可以擷取物件類型,

Type t = typeof(int);Console.WriteLine(t.Name);
這樣的話就會輸出Int32

13、using的使用

在C#中using就和C++的typedef一樣:

using Print = System.Console;namespace MyFirstProgram{    class Program    {                static void Main()        {            Print.WriteLine("Hello world!");        }    }}

第三章的內容差不多就是這樣



《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.