C#-【基礎7-多態、設計模式、接口、裝箱拆箱、序列化、索引器】

【內容】

1.多態

多態就是對象可以表現多個類型的能力。

有幾種建立多態的方式:

用父類實現多態用抽象類實現多態用接口實現多態

2.子類重寫父類

(1)子類可以有與父類方法名相同的方法  但是會出現一條綠線。

如何解決:

1)在子類方法的修飾符後面加new就解決了

2)在父類的方法的修飾符後面加virtual

(2)子類重寫父類

在子類中重寫父類的方法,加上一個override;調用父類的方法,但是把父類的方法進行重寫了,更換了方法裏面的內容。

父類

Public virtual void Show()  //虛方法

子類

Public override void Show()

3.抽象方法抽象類

抽象類與抽象方法由abstract修飾。

Abstract的使用注意:

(1)抽象方法沒有方法體

(2)抽象成員只能存在於抽象類中

(3)抽象類可以有非抽象成員

(4)抽象類的派生類必須實現抽象方法體

(5)抽象類只能用作基類,無法實例化

4.虛方法與抽象方法的比較

虛方法

抽象方法

用virtual修飾

用abstract修飾

要有方法體

不允許有方法體

可以被子類override

必須被子類override

除了密封類都可以寫

只能在抽象類中

5.設計模式

設計模式是軟件開發過程中經驗的積累,特定問題的經過實踐檢驗的特定解決方法。

6.接口

Interface關鍵字,接口中可以有屬性、方法(未實現 )。

接口的名稱通常以“I”開頭,如IList。接口是用來實現的。

如果一個類即繼承了類又實現了接口,那麼累必須寫在前面。一個類只能繼承一個父類,但可以實現多個接口。

語法:

[訪問修飾符] interface 接口名

{

    //接口成員定義

}

Interface ifFly

{

    void Ifly();

}

接口只有方法、屬性、索引和事件的聲明。

public class Student : Ifly

Student實現了Ifly這個接口

7.接口和類的關係

不同點:

不能直接實例化接口;

接口不包含方法的實現;

接口可以多繼承,類只能單繼承。

類定義可在不同的源文件之間進行拆分。

相同點:

接口、類和結構都可以從多個接口繼承;

接口類似於抽象基類,繼承接口的任何非抽象類型都必須實現接口的所有成員;

接口和類都可以包含事件、索引器、方法和屬性。

C#支持多重繼承嗎?

類之間不支持,接口之間支持,類對接口叫做實現,不叫繼承。

類是爹、接口是能力,能有多個能力,但不能有多個爹。

8.裝箱與拆箱

裝箱:值類型“賦值”給引用類型。

拆箱:引用類型“賦值”給值類型。

裝箱:

int num = 10;

object obj = num;

Console.WriteLine(obj);

Console.ReadKey();

拆箱:

int num = 10;

object obj = num;

int number = (int)obj;

Console.WriteLine(number);

Console.ReadKey();

9.序列化

如何序列化:

(1)創建流

(2)創建一個二進制序列化器

(3)開始序列化

using System.Rentime.Serialization.Formatters.Binary;

注意事項:

(1)被序列化的對象的類型必須標記爲[Serializable] (該類的對象可以被序列化)

(2) 當前類的所有父類也必須標記爲[Serializable]

(3)這個類中的所有字段的類型也必須是可序列化

10.索引器

爲了方便將類、結構或接口當做數組來使用;用於封裝內部稽覈或數組。

語法:

[訪問修飾符] 返回類型 this[索引類型 索引名]

{

    //get或set方法體

}

索引本質就是屬性,利用索引可以用key得到項,亦可用項得到序號。

Static void Main(string[] args)

{

    List<int> listInt = new List<int>( );

    MyList nyList = new MyList( );

    myList.Add(1);

    myList.Add(2);

    string st = myList.ToString( );

    Console.WriteLine(st);

    Console.ReadKey( );

}

public class MyList

{

    List<int> list = new List<int>( );

    public int this[int index]

    {

        get { return list[index]; }

        set { list[index] = value; }

    }

    public void Add(int item)

    {

        list.Add(item);

    }

    public override string ToString( )

    {

        string str = “”;

        foreach (int item in list)

        {

            str += item;

        }

        return str;

    }

}

11.靜態方法和實例方法(定義和調用)

靜態

實例(非靜態)

Static關鍵字

不需要static關鍵字

使用類名調用

使用實例對象調用

在靜態方法中,可以訪問靜態成員

在實例方法中,可以直接訪問靜態成員

在靜態方法中,不可以直接訪問實例成員

在實例方法中,可以直接訪問實例成員

調用前初始化

實例化對象時初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章