C# 介面作用的深入理解
原文地址:http://blog.jobbole.com/85751/
假設我們公司有兩種程式設計師:VB程式設計師,指的是用VB寫程式的程式設計師,用clsVBProgramer這個類表示;Delphi程式設計師指的是用Delphi寫程式的程式設計師,用clsDelphiProgramer這個類來表示。每個類都有一個WriteCode()方法。定義如下:
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#介面作用的深入理解C#
- 深入理解JavaScript作用域JavaScript
- 深入理解JavaScript作用域和作用域鏈JavaScript
- 深入理解 Javascript 之 作用域JavaScript
- 深入理解Callable介面
- Golang interface介面深入理解Golang
- 深入理解javascript系列(六):作用域與作用域鏈JavaScript
- 深入理解Java的介面和抽象類Java抽象
- 《深入理解C#》封面解讀C#
- 深入理解C#的裝箱和拆箱C#
- 深入理解JavaScript的作用域與變數提升(hoisting)JavaScript變數
- 深入理解 PHP 的 7 個預定義介面PHP
- 深入理解java的抽象類和介面(轉載)Java抽象
- 介面測試之深入理解HTTPSHTTP
- 深入理解閉包之前置知識→作用域與詞法作用域
- 深入理解javascript作用域系列第五篇——一張圖理解執行環境和作用域JavaScript
- 作用域的理解
- 深入理解javascript作用域系列第二篇——詞法作用域和動態作用域JavaScript
- 重讀《深入理解ES6》 —— 塊級作用域
- 深入理解 RxJava2:從 observeOn 到作用域(4)RxJava
- 《深入理解C#(第3版)》筆記1C#筆記
- 深入理解介面隔離原則:構建靈活的面向介面軟體
- 深入理解javascript原型和閉包(12)——簡介【作用域】JavaScript原型
- 深入理解C#中的非同步(一)——APM模式EAP模式C#非同步模式
- 個人理解emulateJSON作用 與java後臺介面引數的關係JSONJava
- 深入理解ES6--12.代理與反射介面反射
- C#中#region,#if的作用C#
- c#基礎系列3—深入理解ref 和outC#
- 架構師帶你深入理解Java的介面和抽象類架構Java抽象
- 深入理解執行上下文、作用域鏈和閉包
- C# ASP.NET Core 中 IWebHostEnvironment 介面的作用是什麼?C#ASP.NETWeb
- 理解 JavaScript 中的作用域JavaScript
- 理解Object.defineProperty的作用Object
- 理解JavaScript的作用域鏈JavaScript
- 探索 DTD 在 XML 中的作用及解析:深入理解文件型別定義XML型別
- 一文深入理解ConfigurationConditon 介面
- 介面(API)的理解API
- 老婆理解的“介面”