《C#進階編程(第四版)》—讀書筆記(1)

來源:互聯網
上載者:User
小弟剛也是剛開始學習c#以及.net ,寫過一些代碼。感覺基礎還是很重要的,所有想認真地學習一遍 《C#進階編程(第四版)》。本著吃透的態度,我會對自己不怎麼確定的地方和感覺容易出錯的地方,做一些demo 來驗證。肯定會有些自己理解錯誤的地方,請各位提出,一起進步。(文章中的代碼都是在vs2005中調試通過的。)

時間:2008-2-25

內容:第二章 c#基礎(23~99

一、c#中定義的任何的變數(實值型別和參考型別)必須先初始化再使用,不然編譯出錯。

二、注意參考型別 string 的特殊性:雖讓string是參考型別,但是如果對一個string執行個體做修改,那麼會建立一個新的string執行個體,這一點與其他的參考型別是不同的。

三、XML文檔說明:C#有根據特定的注釋自動建立XML格式的文檔說明的功能,用三斜杠(""")表示

時間:2008-2-26

內容:第三章對象和類型(100~116

 

五,類中的常量成員不能聲明為static ,是不是常量成員預設的都是static 的?常量成員是屬於類的資料,還是屬於類的執行個體---對象的資料?

常量成員是屬於類的資料,因為一個類中聲明了一個常量,那麼在初始化之後它是不可變的,它是一個類中共用的。類似於static型的成員。

六,方法參數傳遞的三種方法:

1,值傳遞

2,引用傳遞 ref ,傳得是引用,可以對該參數修改

3,輸出傳遞,out ,主要是實現輸出的問題(返回多個參數)。

C# 在方法參數傳遞的要求:在傳遞給方法之前,無論是按值傳遞或是按引用傳遞,都必須初始設定變數(而在方法中對值傳參數的任何修改都不會帶出到方法外,在方法中對ref 參數作的修改被帶到方法外影響實參,但是這樣的修改可以發生也可以不發生)。而按OUT傳遞,傳遞給方法的變數可以不初始化。但是在該方法中必須對OUT參數賦值(即使在傳給方法之前OUT參數已經初始化,也必須做此操作)。

七,方法重載(overload)?

1, 並沒有overload關鍵字,方法重載是有參數的個數,以及參數的類型來區別的。

2, 兩個方法不能僅在傳回型別上有區別。

3, 兩個方法不能僅根據參數是聲明為ref或out 來區別。

八,方法重載(overload)與方法覆寫(override)的區別

1, 作用的不同:方法重載(overload)是為同一類中的一種方法提供幾種可能的實現方法;而方法覆寫(override)存在於繼承類中,為了實現與父類同一方法的不同實現。

2, 實現方式不同:沒有overload 關鍵字,是通過參數列表來區別不同的方法的

重載Overload特點(兩必須一可以)
public bool withdraw(double amt, string name)
public double withdraw(double amt)
1、方法名必須相同
2、參數列表必須不相同
3、傳回值類型可以不相同

使用關鍵字:override
覆寫Override特點(三相同):
public override bool withdraw(...)
1、方法名相同
2、參數列表相同
3、傳回值類型相同

   九 .net程式編譯執行過程

              1 編寫程式

              2 調試,編譯通過,.net代碼會編譯為MSIL(MS Intermediate Language)

        3 然後在運行期間進行正常的JIT(Just In Time)編譯,獲得內部可執行代碼。
   十 建構函式與初始化

            0建構函式可以定義為private 或protected

1 C#要求所有的變數或對象在使用之前必須初始化(注意:很容易出錯!)。而建構函式做的大多是做初始化的工作。C#中並不是必須為每一個類寫建構函式,一般情況下,如果沒有提供任何建構函式,編譯器會在後台建立一個預設的建構函式。它只是把所有的成員欄位初始化為標準的預設值(如 參考型別:null,數字資料類型為 0,bool 為 false)。

2 如果一個類中沒有定義任何公用或受保護的建構函式,就不能使用new 方法來建立該類的執行個體。這在以下兩種情況下是有用的:

    A ,類中緊緊包括靜態成員或屬性,因此永遠不會執行個體化。

 B ,希望類僅通過調用某個靜態成員函數來執行個體化。

如:

namespace InforExchangFlat

{

    public class ClassSqlDB

    {

        //定義靜態執行個體

        private static ClassSqlDB Instance;

        //定義SqlConnection對象

        public SqlConnection objConnection =new SqlConnection();

        ///<summary>

        ///靜態執行個體初始化函數

        ///</summary>

        static public ClassSqlDB GetInstance()

        {

            if (Instance == null)

            {

                Instance = new ClassSqlDB();

            }

            return Instance;

}

}

}

十一特殊的建構函式

       1 靜態建構函式:

C#的一個新特徵是可以給類編寫無參數的靜態建構函式,這種建構函式只執行一次(通常在第一次調用類的成員之前執行)。而一般的建構函式只要建立類的對象就會執行。主要作用:初始化類中靜態欄位和屬性。靜態建構函式沒有存取修飾詞。

如:

using System;

using System.Drawing;

namespace DHCC.Changjia

{

    public class UserPreferences

    {

        public static readonly Color BackColor;

        static UserPreferences()

        {

            DateTime now = DateTime.Now;

            if (now.DayOfWeek == DayOfWeek.Saturday

                || now.DayOfWeek == DayOfWeek.Sunday)

                BackColor = Color.Green;

            else

                BackColor = Color.Red;

        }

        private UserPreferences()

        {

        }

}

}

      2 從其他建構函式中調用建構函式

        一個類有多個建構函式,每一個建構函式都要對一些欄位初始化。所有會存在一定量的重複代碼,可以把這些重複代碼寫到一個建構函式中。

如:

    Class Car

{

    Private string description;

    Private uint nWheels;

    Public Car(string model,uint nWheels)

{

    This.description=model;

    This.nWheels=nWheels;

}

Public Car(string model):this(model,4)

{

}

}

十二常量與唯讀欄位的區別

    常量(const):已知的,不能修改的值。Const都是靜態,但不能使用static修飾。

唯讀欄位(readonly):不能修改的,但在運行之前其值是未知的,在運行過程中賦予值。唯讀欄位有特定的賦值地區:建構函式,可以在建構函式中經過計算賦值給唯讀欄位,唯讀欄位可以是靜態欄位(一個類只有一個值),也可以是執行個體欄位(每一個執行個體有自己的值)

聯繫我們

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