C# 多態(tài)性的深入理解
更新時(shí)間:2013年06月09日 08:56:06 作者:
本篇文章是對(duì)C#中的多態(tài)性進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
MSDN 上面的定義:通過(guò)繼承,一個(gè)類(lèi)可以有多種類(lèi)型:可以用作它自己的類(lèi)型,任何基類(lèi)型,或者在實(shí)現(xiàn)接口時(shí)用作任何接口的類(lèi)型。
從兩個(gè)方面來(lái)說(shuō)明多態(tài)
1.在運(yùn)行時(shí),方法參數(shù)和集合或者是數(shù)組等位置,派生類(lèi)的對(duì)象都可以作為基類(lèi)的對(duì)象處理,發(fā)生此情況時(shí),該對(duì)象的聲明類(lèi)型不再與運(yùn)行時(shí)類(lèi)型相同。
2.基類(lèi)定義實(shí)現(xiàn)虛方法,派生類(lèi)重寫(xiě)這些方法,在運(yùn)行時(shí),CLR會(huì)查找運(yùn)行時(shí)類(lèi)型,并且調(diào)用派生類(lèi)重寫(xiě)的方法.
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Draw a shape");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a circle");
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a Rectangle");
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a Triangle");
}
}
class Programm
{
static void Main()
{
//此次就說(shuō)明了,派生類(lèi)對(duì)象可以作為基類(lèi)對(duì)象進(jìn)行處理
Shape[] shapes =
{
new Circle(),
new Rectangle(),
new Triangle()
};
foreach (Shape s in shapes)
{
//調(diào)用Draw()方法的時(shí)候,調(diào)用了派生重寫(xiě)的方法,而不是基類(lèi)
s.Draw();
}
}
}
從兩個(gè)方面來(lái)說(shuō)明多態(tài)
1.在運(yùn)行時(shí),方法參數(shù)和集合或者是數(shù)組等位置,派生類(lèi)的對(duì)象都可以作為基類(lèi)的對(duì)象處理,發(fā)生此情況時(shí),該對(duì)象的聲明類(lèi)型不再與運(yùn)行時(shí)類(lèi)型相同。
2.基類(lèi)定義實(shí)現(xiàn)虛方法,派生類(lèi)重寫(xiě)這些方法,在運(yùn)行時(shí),CLR會(huì)查找運(yùn)行時(shí)類(lèi)型,并且調(diào)用派生類(lèi)重寫(xiě)的方法.
復(fù)制代碼 代碼如下:
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Draw a shape");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a circle");
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a Rectangle");
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a Triangle");
}
}
class Programm
{
static void Main()
{
//此次就說(shuō)明了,派生類(lèi)對(duì)象可以作為基類(lèi)對(duì)象進(jìn)行處理
Shape[] shapes =
{
new Circle(),
new Rectangle(),
new Triangle()
};
foreach (Shape s in shapes)
{
//調(diào)用Draw()方法的時(shí)候,調(diào)用了派生重寫(xiě)的方法,而不是基類(lèi)
s.Draw();
}
}
}
相關(guān)文章
winform下實(shí)現(xiàn)win7 Aero磨砂效果實(shí)現(xiàn)代碼
winform下實(shí)現(xiàn)win7 Aero磨砂效果實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-03-03C#實(shí)現(xiàn)將Word轉(zhuǎn)化分享為電子期刊
曾經(jīng)由一個(gè)項(xiàng)目,要求實(shí)現(xiàn)制作電子期刊定期發(fā)送給企業(yè)進(jìn)行閱讀,由編輯人員使用 Microsoft Word先生成PDF文件,然后將生成的PDF文件轉(zhuǎn)化為JPEG文件,最后將JPEG文件生成電子書(shū)模式,本文給大家介紹了C#實(shí)現(xiàn)將Word轉(zhuǎn)化分享為電子期刊,需要的朋友可以參考下2023-12-12C#實(shí)現(xiàn)獲取文本文件的編碼的一個(gè)類(lèi)(區(qū)分GB2312和UTF8)
這篇文章主要介紹了C#實(shí)現(xiàn)獲取文本文件的編碼一個(gè)類(lèi),本文給出類(lèi)可以自動(dòng)區(qū)分GB2312和UTF8,并同時(shí)給出了使用方法,需要的朋友可以參考下2014-09-09C#中調(diào)用VB中Inputbox類(lèi)的實(shí)現(xiàn)方法
本文主要介紹在項(xiàng)目中引用Microsoft.VisualBasic,間接使用VB中的各種類(lèi)庫(kù)的方法,或者自己創(chuàng)建函數(shù),調(diào)用自定義方法,以實(shí)現(xiàn)InputBox相關(guān)的功能。2016-05-05C#中計(jì)時(shí)器的簡(jiǎn)單實(shí)現(xiàn)方法示例
這篇文章主要介紹了C#中計(jì)時(shí)器的簡(jiǎn)單實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了C#計(jì)時(shí)器的簡(jiǎn)單定義與使用技巧,需要的朋友可以參考下2017-05-05Silverlight文件上傳下載實(shí)現(xiàn)方法(下載保存)
這篇文章主要介紹了Silverlight文件上傳下載實(shí)現(xiàn)方法(下載保存) ,需要的朋友可以參考下2015-11-11