C#面向對象一(方法、封裝、類、兩種數據類型)


1字段

  字段主要為類的內部做數據交互使用,字段一般為private。

  字段可以賦值,可取值。

  當字段需要為外部提供數據時,請將字段封裝為屬性,而不是使用公有字段,這是面向對象所提倡的。

2屬性--描述對象的靜態特征

  屬性其實是外界訪問私有字段的入口,屬性本身不保存任何數據。

  給屬性賦值,其實就是給屬性的私有字段賦值;讀取屬性,其實是獲取屬性指向的私有字段或其他值。

  屬性一般是向外部提供數據,主要用來描述對象的靜態特征,所以屬性一般是public的。

  屬性可以根據需要設置為只讀、只寫,提高數據安全性。只讀屬性沒有set方法。

  屬性內部可以添加需要的邏輯,從而避免非法數據。

3自動屬性

  不能直接操作私有字段

  不能設置只讀只寫

  不能添加驗證邏輯

 4方法的定義

  概念:對象的動態特征就是方法(靜態特征是屬性),方法表示此對象可以做什么。

  類型:實例方法,靜態方法,(構造方法,多態時會用到抽象方法和虛方法)

5方法注意事項

  訪問修飾符:默認private

  方法名:一般時動詞或動賓短語。首字母大寫。不能以數字開頭。

  參數列表:根據需要添加

  成員變量==字段,相對與局部變量

6面向對象小結

  6.1封裝

    封裝:將一個或若干個小對象包裝在一起,然后以一個新的對象呈現

    作用:封裝使得一個對象的內部特征變得隱蔽,從而更安全。

    類封裝:類是最小的程序單元,是對屬性、方法的封裝,類中的public成員都是對外提供的數據訪問接口。

    模塊封裝:類可以被封裝成模塊,組成更大的程序組件。

    從OOP理解:外界調用的時候可以不用關心內部實現細節;充分體現面向對象中的“高內聚、低耦合”特性。

    對象的重用性:依此封裝,處處使用。

  6.2變量

    變量作用:指代內存地址,便於記憶。

    變量的作用范圍:

      局部變量:一個方法內部交換數據,方法執行完畢,如果沒有返回值,則變量很快被清理

      成員變量:多個方法內部交換數據,通過對象的屬性外對提供數據,變量的清理不確定

7方法重載

  方法重載:編譯器將根據方法參數的個數和類型自動匹配類的對應方法。

  方法重載的好處:減少類的對外接口(只顯示一個方法),降低類的復雜度(低耦合);

                 便於用戶使用(相同功能的方法名稱一樣)和識別

  方法重載的條件:方法的名稱必須一樣

        方法的參數個數或參數類型不一樣

  方法重載的無關性:方法重載與返回值無關。

8靜態方法與重載

  關鍵字static:可以修飾類、方法、成員變量,修時候稱之為靜態類、靜態方法、靜態字段。

  靜態成員在程序運行時被調入內存中,並且在系統未關閉之前不會被GC吸收。

  類的成員使用非常頻繁時,可以考慮使用static修飾,但不要使用過多。

  靜態成員不能直接調用實例成員(靜態方法不能直接調用實例方法)。

  靜態方法也可以重載。

9構造方法

  如果兩個重載的構造方法中有代碼重復,可以用“:this()”調用自身其他構造方法。

 10對象初始化器

  對象在創建時也可以通過對象初始化器完成“屬性的初始化”。

1  Student objStudent3 = new Student()
2             {
3                 StudentId = 10005,
4                 Birthday = Convert.ToDateTime("1987-10-11"),
5                 StudentName = "小紅"
6             };
對象初始化器

  對象初始化器和構造方法的異同點

  相同點:都可以完成屬性的初始化。

  不同點:1構造函數具有強制性,對象初始化器沒有強制性

      2對象初始化器只能完成屬性初始化,構造函數可以完成任何需要的初始化工作,如對象創建時讀取文件等

      3對象初始化器是在創建對象的時候使用,構造函數寫在類里面

      4對象初始化器只能在.NET3.0以后版本使用,構造函數在.NET1.0版本就有

  對象創建(new)的兩種方式:構造方法和初始化器。

11對象銷毀

  對象的生命周期:對象在內存不斷額“生生死死”,具有生命周期。

  對象在內存中的狀態:正在引用  程序正在使用的對象

            游離狀態   沒有引用的對象,已經使用完畢但依然占據空間

  垃圾回收機制(GC):.NET虛擬機特有機制,自動運行,並檢查對象的狀態。

              發現對象不再引用時,會將其釋放所占有的空間(銷毀)。

              GC的使用大大減輕了程序員手動釋放對象的操作,且程序運行穩定。

12析構函數

  C++中新購函數的使用,當使用delete關鍵字刪除對象時,析構函數會自動調用。

  ~類名()

  {}

  托管運行環境下對象的銷毀由虛擬機負責,析構函數沒多大用途。

13對象的數據類型

  基本數據類型:int、double、bool等

  引用數據類型:數組、對象、string(string分類上屬於引用數據類型,但數據的處理和基本數據類型一樣)

  兩個對象,對象1.Name=“王華”;  對象2=對象1;   對象2.Name=“李紅”;  此時對象1.Name也是“李紅”。說明===>>>對象是引用類型。

14兩種數據類型特點

  基本數據類型(值類型):值類型變量傳遞時,將自己復制一份賦給了新變量。

  引用數據類型(對象類型):引用類型變量傳遞時,將自己的內存地址賦給了新變量。

15 ref關鍵字

  值類型在傳遞的過程中都是以副本的方式進行傳遞,使用ref關鍵字可以將值類型變量按照引用類型方式傳遞。

  實際開發中不建議經常使用ref關鍵字!

16 out關鍵字

  使用out關鍵字可以讓方法有多個返回值

  out關鍵字其實也是使用引用類型傳遞!實踐開發中不建議經常使用out關鍵字!

  可以使用“字典集合”方式返回多個參數!

/// <summary>
/// 對象深拷貝
/// </summary>
public class CloneObject
{
    /// <summary>
    /// 對象深拷貝
    /// </summary>
    /// <typeparam name="T">對象類型</typeparam>
    /// <param name="obj">對象</param>
    /// <returns>內存地址不同,數據相同的對象</returns>
    public static T DeepCopy<T>(T obj)
    {
        object retval;
        using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter bf = new BinaryFormatter();
            //序列化成流
            bf.Serialize(ms, obj);
            ms.Seek(0, SeekOrigin.Begin);
            //反序列化成對象
            retval = bf.Deserialize(ms);
            ms.Close();
        }
        return (T)retval;
    }
}
深拷貝

17類和對象小結

  17.1封裝的概念和作用:根據需要使用private和public修飾符類修飾類的成員(字段、屬性、方法等),這樣能避免私有的字段和方法被外界使用,我們把這種使用特性稱為封裝。

    封裝是一個廣義概念,一個屬性是對字段的封裝,一個方法是對一系列具體實現方式的封裝,一個類是對屬性和方法的封裝,一個模塊組件是對類的封裝。

  17.2面向對象編程好處

      封裝使得開發人員可以更加關注自己的需求:類的方法實現特定的功能,其他的類可以完全不用關心它是如何實現的,只需要調用即可;團隊開發中,類的編寫者也可以完全不用關心別人是如何使用的。

      一個類定義以后,可多次使用,避免重復使用。

  17.3類視圖

    通過視圖方式展示類的組織結構。私有成員帶一個“鎖”標志。

    對類右鍵“查看類圖”。

  17.4認識祖先類Object

    .NET平台規定:所有類都必須自動繼承自object類。

  17.5裝箱與拆箱

    裝箱:將值類型轉化為對象的過程  object a=20;

    拆箱:將對象類型的變量轉化為值類型的過程  int b=(int)a;

    頻繁的拆裝箱操作會影響系統性能。

18.protected關鍵字

  protected聲明的字段可以被基類或基類的派生類所引用。

  請注意要么在基類中被引用(相當於private),要么是在派生類中被派生類聲明的對象所引用。

  在派生類中不能被基類聲明的對象所引用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM