【內容】
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關鍵字 |
使用類名調用 |
使用實例對象調用 |
在靜態方法中,可以訪問靜態成員 |
在實例方法中,可以直接訪問靜態成員 |
在靜態方法中,不可以直接訪問實例成員 |
在實例方法中,可以直接訪問實例成員 |
調用前初始化 |
實例化對象時初始化 |