物件導向的關鍵技術(多態、介面、抽象)

來源:互聯網
上載者:User

對於一些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/
如果,您喜歡這篇文章的話,您可以分享給您的好友,請點擊按鈕【推薦】。
如果,您想更快的閱讀我的最新文章,您可以關注我,請點擊按鈕【關注】。
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.