C# 多型性
多型性常被視為自封裝和繼承之后,面向物件的編程的第三個支柱, Polymorphism(多型性)是一個希臘詞,指“多種形態”,
多型:一個介面多個功能,
靜態多型性:編譯時發生函式回應(呼叫);
動態多型性:運行時發生函式回應,
靜態系結(早期系結):編譯時函式和物件的連接機制, 兩種技術實作靜態多型性:函式多載/運算子多載,
函式多載:在同一范圍內對相同函式名有多個定義,可以是引數型別或引數個數的不同,但不許只有回傳值型別不同,
運算子多載:
關鍵字 abstract 宣告抽象類:用于介面部分類的實作(派生類繼承抽象類時,實作完成),抽象類包含抽象方法,抽象方法可被派生類實作,
多型實作
實作多型三種方式:
抽象類
C# 允許您使用關鍵字 abstract 創建抽象類,用于提供介面的部分類的實作,當一個派生類繼承自該抽象類時,實作即完成,抽象類包含抽象方法,抽象方法可被派生類實作,派生類具有更專業的功能,
請注意,下面是有關抽象類的一些規則:
- 抽象類不能實體化,
- 不能在一個抽象類外部宣告一個抽象方法,
- 通過在類定義前面放置關鍵字 sealed,可以將類宣告為密封類,當一個類被宣告為 sealed 時,它不能被繼承,抽象類不能被宣告為 sealed,
public abstract class A
{
public abstract void DoWork(int i);
}
public class B : A
{
public override void DoWork(int i)
{
// New implementation.
}
}
//main
A a= new B();
a.Dowirk(1);
介面類
使用介面可以在類中包括來自多個源的行為, 由于C#語言不支持多重繼承,所以該功能很重要, 此外,如果要模擬結構的繼承,也必須使用介面,因為它們無法實際從另一個結構或類繼承,
一個類能同時實作多個介面,還能在實作介面的同時再繼承其他類,并且介面之間也可以繼承,
介面定義
interface 介面名稱
{
介面成員;
}
interface IEquatable<T>
{
bool Equals(T obj);
}
介面是一種規范,
為了多型,介面不能被實體化,
介面不能添加訪問修飾符,默認公開(piblic),
介面只能有,方法,屬性,索引器,事件,不能有欄位和建構式,
介面與介面直接可以被繼承,且可以多繼承,
介面不能繼承類,類可以繼承介面
實作介面的子類必須實作該介面的全部成員
一個類可以同時繼承一個類并實作多個介面
顯示實作
實作目的:解決方法重命名問題
什么時候實作:當繼承介面中的方法和引數一模一樣時
interface ILeft
{
int P { get;}
}
interface IRight
{
int P();
}
為了同時實作兩個介面,類必須對屬性 P 和/或方法 P 使用顯式實作以避免編譯器錯誤,
class Middle : ILeft, IRight
{
public int P() { return 0; }
int ILeft.P { get { return 0; } }
}
虛方法
類中定義的允許在派生類中重寫的方法,使用virtual關鍵字定義
// Virtual method
public virtual void Draw()
{
Console.WriteLine("Performing base class drawing tasks");
}
class Circle : Shape
{
public override void Draw()
{
// Code to draw a circle...
Console.WriteLine("Drawing a circle");
base.Draw();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/46987.html
標籤:C#
