對於一些C#的初學者,類似於物件導向中的多態、介面、抽象、不是能很好的理解,本帖只針對一些初學者對這幾個概念不是很理解的人看,
牛人請繞道額就不要浪費時間了哈!我一個一個來就舉一些簡單易懂的例子!
多態
直接上例子:
using System;//包含基本類和基類
using System.Collections.Generic;//定義泛型集合的介面和類
using System.Linq;//支援Language-integrated Query (LINQ)
using System.Text;//包含用於字元編碼等功能的對象
namespace Test
{
class Program
{
static voidMain(string[] args)
{
MyHobby[]hobbies=new MyHobby[4];
hobbies[0] = new MyHobby();
hobbies[1] = new Writing();
hobbies[2] = new Programing();
hobbies[3] = new Music();
foreach(MyHobby obj in hobbies)
{
obj.Interest();
}
Console.ReadKey();
}
}
/// <summary>
/// 基類 MyHobby
/// </summary>
class MyHobby
{
public virtual void Interest()
{
Console.WriteLine("我的愛好是:");
}
}
/// <summary>
/// Writing 繼承 MyHobby
/// </summary>
class Writing : MyHobby
{
public override void Interest()//重載方法Interest()
{
Console.WriteLine("寫作");
}
}
/// <summary>
/// Programing 繼承 MyHobby
/// </summary>
class Programing : MyHobby
{
public override void Interest()//重載方法Interest()
{
Console.WriteLine("編程");
}
}
/// <summary>
/// Music 繼承 MyHobby
/// </summary>
class Music : MyHobby
{
public override void Interest()//重載方法Interest()
{
Console.WriteLine("音樂");
}
}
}
運行結果:
總結:思想是,從基類中派生出三個類,在這三個類中重載基類的方法,然後重新調用衍生類別中的方法。因為每一次重載的功能都不一樣,所以就實現了多態!
介面
還是用一個例子來說明:
using System;//包含基本類和基類
using System.Collections.Generic;//定義泛型集合的介面和類
using System.Linq;//支援Language-integrated Query (LINQ)
using System.Text;//包含用於字元編碼等功能的對象
namespace Test
{
class Program
{
static voidMain(string[] args)
{
UseInterface u = new UseInterface();//建立對象,調用方法
u.SayHello();
Console.ReadKey();
}
}
/// <summary>
/// 定義了一個介面FirstInterface
/// </summary>
interface FirstInterface
{
string Name//定義了一個屬性
{
get;
set;
}
void SayHello();//關鍵定義了方法,但是沒有方法體!
}
/// <summary>
/// 既然已經繼承了介面,那必須要實現介面中的全部屬性,方法等,缺一不可,
/// 例如如果不實現Name屬性,程式就會報錯!
/// </summary>
class UseInterface : FirstInterface
{
string name = "我的名字叫龍騰!";
public string Name//重新實現介面中的屬性
{
get { return name; }
set { name = value; }
}
/// <summary>
/// 實現介面中的方法,這裡不需要像多態中用到的 override 改寫方法,直接拿過來加上方法體就可!
/// </summary>
public void SayHello()
{
Console.WriteLine("大家好!"+this.name);
}
}
}
運行結果:
總結:介面的本質就是一些方法!但是要使用這些方法必須要按照一定的規則,否則就不能使用。定義介面,其實質就是定義規則,要使用介面,必須在它的規則下進行!
抽象
抽象類別和介面有一些相似之處,它們都包含由衍生類別繼承的成員,介面和抽象類別都不能直接執行個體化!(虛的東西你怎麼能拿來使用呢對吧?必須要使用第三方的東西來搭橋)
using System;//包含基本類和基類
using System.Collections.Generic;//定義泛型集合的介面和類
using System.Linq;//支援Language-integrated Query (LINQ)
using System.Text;//包含用於字元編碼等功能的對象
namespace Test
{
class Program
{
static voidMain(string[] args)
{
UseMyAbstract u = new UseMyAbstract();//建立對象,調用方法
u.SayHello();
Console.ReadKey();
}
}
/// <summary>
/// 定義一個抽象類別MyAbstract
/// </summary>
abstract class MyAbstract
{
public abstract void SayHello();//定義一個抽象方法,同樣沒有方法體!
}
/// <summary>
///定義一個 UseMyAbstract類 繼承 MyAbstract抽象類別
/// </summary>
class UseMyAbstract : MyAbstract
{
public override void SayHello()//改寫抽象類別MyAbstract中的方法SayHello()
{
Console.WriteLine("大家好!我是龍騰!");
}
}
}
運行結果:
總結:抽象類別可以擁有抽象成員,但是不能直接被執行個體化,並且沒有代碼體,它的執行方法是在其衍生類別中實現的!注意,只要這個類中有一個方法定義為抽象方法,那麼這個類必須定義為抽象類別!
以上只是我個人的一些小的學習感悟!希望能幫到那些需要幫到的人!
作者:李正興 英文名:black_li
出處:http://www.cnblogs.com/longteng1991/
如果,您喜歡這篇文章的話,您可以分享給您的好友,請點擊按鈕【推薦】。
如果,您想更快的閱讀我的最新文章,您可以關注我,請點擊按鈕【關注】。
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。