首頁 後端開發 C#.Net教程 C#介面的實例詳解

C#介面的實例詳解

Apr 24, 2017 pm 01:36 PM

1、C#介面的功能 

使用概括:定義接口,內含方法,但沒有方法具體實作的程式碼。然後在繼承該介面的類別裡面要實作介面的所有方法的程式碼。但沒有真正體認到介面的作用的時候就覺得用介面是多此一舉,當然你這樣想那是絕對絕對錯誤的。關於介面的作用,網路上有一位就真的深入淺出給我們做了很好理解的分析。

[csharp] view plain copy

<p></p><pre code_snippet_id="219991" snippet_file_name="blog_20140306_1_6634576" name="code" class="csharp">//我们定义一个接口  
public interface IBark    
{  
    void Bark();  
}
登入後複製

//再定義一個類別,繼承於IBark,並且必需實現其中的Bark()方法  

#
public class Dog:IBark    
{  
    public Dog()  
    {}  
    public void Bark()  //实现其中的Bark()方法  
    {  
       Consol.write("汪汪");  
     }  
}
登入後複製

//然後,聲明Dog的一個實例,並調用Bark()方法  

#      Dog 旺財=new Dog();  

      旺財.Bark()<#n(); #問題:若是想呼叫Bark()方法,只需要在Dog()中聲明這樣的一個方法不就行了嗎,幹什麼還要用接口呢.因為接口中並沒有Bark()具體實現.真的實現還是要在Dog()中.那麼使用接口不是多此一舉嗎?

還有人是這樣說的:從接口的定義方面來說,接口其實就是類和類之間的一種協定,一種約束.還拿上面的例子來說.所有繼承了IBark接口的類中必需實現Bark()方法.那麼從用戶(使用類的用戶)的角度來說,如果他知道了某個類是繼承於IBark介面,那麼他就可以放心大膽的呼叫Bark()方法,而不用管Bark()方法具體是如何實現的<.比如,我們另外寫了一個類.當用戶用到Cat類或是Dog類的時候,知道他們繼承於IBark,那麼不用管類別裡的具體實作,而就可以直接呼叫Bark()方法,因為這兩個類別中肯定有關於Bark()方法的具體實作.

如果我們從設計的角度來看.一個專案中用若干個類別需要去編寫,由於這些類別比較複雜,工作量比較大,這樣每個類別就需要佔用一個工作人員進行編寫.比如A程式設計師去定Dog類,B程式設計師去寫Cat類.這兩個類別本來沒什麼聯繫的,可是由於用戶需要他們都實現一個關於"叫"的方法.這就要對他們進行一種約束.讓他們都繼承於IBark介面,目的是方便統一管理.另一個是方便調用.當然了,不使用接口一樣可以達到目的.只不過這樣的話,這種約束就不那麼明顯,如果這樣類還有Duck類等等,比較多的時候難免有人會漏掉這樣方法.所以說還是透過介面更可靠一些,約束力更強一些.

C#中介面的深入淺出    假設我們公司有兩種程式設計師:VB程式設計師,指的是用VB寫入程式的程式設計師,用clsVBProgramer這個類別表示;Delphi程式設計師指的是用Delphi寫程式的程式設計師,用clsDelphiProgramer這個類別來表示。每個類別都有一個WriteCode()方法。定義如下:

[csharp] view plain copy

class clsVBProgramer()  
{  
....  
WriteCode()  
{  
     //用VB语言写代码;  
}  
....  
}  
  
class clsDelphiProgramer()  
{  
....  
WriteCode()  
{  
    //用Delphi语言写代码;  
}  
   ....  
}
登入後複製

/*現在公司來了一個項目,要求派某個程式設計師寫一個程式*/  

class clsProject()  
{  
....  
WritePrograme(clsVBProgramer programer)//用VB写代码  
{  
    programer.WriteCode();  
}  
WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码  
{  
    programer.WriteCode();  
}  
......  
}
登入後複製

在主程式中我們可以這樣寫:  

main()  
{  
   clsProject proj=new clsProject;  
   //如果需要用VB写代码  
   clsVBProgramer programer1=new clsVBProgramer;  
   proj.WritePrograme(programer1);  
   //如果需要用Delphi写代码  
   clsDelphiProgramer programer2=new clsDelphiProgramer;  
   proj.WritePrograme(programer2);  
}
登入後複製

但是如果這時公司又來了一個C#程式設計師,我們怎麼改這段程序,使它能夠實現用C#寫程式的功能呢?我們要增加一個新類別clsCSharpProgramer,同時在此clsProject這個類別中要再次重載WritePrograme(clsCSharpProgramer programer)方法。這下麻煩多了。如果還有C程式設計師,C++程式設計師,Java程式設計師呢。麻煩大了!

但是如果改用接口,就完全不一樣了:

先宣告一個程式設計師介面:


interface IProgramer()
{
WriteCode();
}
登入後複製

然後宣告兩個類,並實作IProgramer介面:

class clsVBProgramer():IProgramer{....WriteCode(){     //用VB语言写代码;}....}
class clsDelphiProgramer():IProgramer{....WriteCode(){    //用Delphi语言写代码;}   ....}
登入後複製

對clsProject這個類別進行一下修改:

class clsProject(){....WritePrograme(IProgramer programer){    programer.WriteCode();//写代码}......}
main(){   clsProject proj=new clsProject;   IProgramer programer;   //如果需要用VB写代码   programer=new clsVBProgramer;   proj.WritePrograme(programer);   //如果需要用Delphi写代码   programer=new clsDelphiProgramer;   proj.WritePrograme(programer);   }
登入後複製

如果再有C#,C,C++,JAVA這樣的程式設計師加入進來的話,我們只需把它們相關的類別加進來,然後在main()中稍做修改就OK了。擴充性特別好!


另外我們如果把clsProject這個類別封成一個元件,那麼當我們的使用者需要要擴充功能的時候,我們只需要在外部做很小的修改就能實現,可以說根本就用不著改動我們已經封好組件!是不是很方便,很強大!

以上是C#介面的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1249
24
使用 C# 的活動目錄 使用 C# 的活動目錄 Sep 03, 2024 pm 03:33 PM

使用 C# 的 Active Directory 指南。在這裡,我們討論 Active Directory 在 C# 中的介紹和工作原理以及語法和範例。

C# 中的隨機數產生器 C# 中的隨機數產生器 Sep 03, 2024 pm 03:34 PM

C# 隨機數產生器指南。在這裡,我們討論隨機數產生器的工作原理、偽隨機數和安全數的概念。

C# 資料網格視圖 C# 資料網格視圖 Sep 03, 2024 pm 03:32 PM

C# 資料網格視圖指南。在這裡,我們討論如何從 SQL 資料庫或 Excel 檔案載入和匯出資料網格視圖的範例。

C# 中的階乘 C# 中的階乘 Sep 03, 2024 pm 03:34 PM

C# 階乘指南。這裡我們討論 C# 中階乘的介紹以及不同的範例和程式碼實作。

c#多線程和異步的區別 c#多線程和異步的區別 Apr 03, 2025 pm 02:57 PM

多線程和異步的區別在於,多線程同時執行多個線程,而異步在不阻塞當前線程的情況下執行操作。多線程用於計算密集型任務,而異步用於用戶交互操作。多線程的優勢是提高計算性能,異步的優勢是不阻塞 UI 線程。選擇多線程還是異步取決於任務性質:計算密集型任務使用多線程,與外部資源交互且需要保持 UI 響應的任務使用異步。

C# 中的模式 C# 中的模式 Sep 03, 2024 pm 03:33 PM

C# 模式指南。在這裡,我們討論 C# 中模式的介紹和前 3 種類型,以及其範例和程式碼實作。

C# 中的質數 C# 中的質數 Sep 03, 2024 pm 03:35 PM

C# 質數指南。這裡我們討論c#中素數的介紹和範例以及程式碼實作。

C#與C:歷史,進化和未來前景 C#與C:歷史,進化和未來前景 Apr 19, 2025 am 12:07 AM

C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發明,旨在將面向對象編程引入C語言,其演變歷程包括多次標準化,如C 11引入auto關鍵字和lambda表達式,C 20引入概念和協程,未來將專注於性能和系統級編程。 2.C#由微軟在2000年發布,結合C 和Java的優點,其演變注重簡潔性和生產力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發者的生產力和雲計算。

See all articles