日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 接口的作用浅谈举例(转)

發布時間:2025/7/14 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 接口的作用浅谈举例(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉:http://blog.csdn.net/liuqinghui1990/article/details/77171051

?我初次接觸接口(Interface),對接口的作用有點迷茫,C#接口中包含方法、屬性、索引器和事件的聲明,但常用的接口中一般就是方法和屬性,然而接口中并沒有方法的具體實現代碼(不能提供任何成員實現),只有方法的返回類型和方法名。一個類實現了某個接口,則必須在類中包含接口中所有方法的實現代碼,換句話說就是,繼承自接口的類中必須包含接口中函數的實現代碼。

? ? ? ? 說到這里,可能就可以看出接口的一個作用,可以對繼承自接口的類起到約束作用,下面通過一個簡單的例子來說明。這個例子是《C#高級編程》這本書上的,我稍微改動擴展了下。

舉例:

大家都知道銀行賬戶有很多種,像學生時代的我們一般都是儲蓄卡(具有存錢、取錢、查詢余額等功能),工作后有錢了可能辦個黃金卡、白金卡什么的,發財了可能會升級為鉆石卡等,那么一個銀行賬戶相當于一個類,這些不同等級的銀行賬戶都具有一些共同的基本功能(存錢、取錢等),然而等級高的賬戶還有一些額外功能來提升銀行的服務水平,所以這些賬戶類中既有共同的函數,又具有差異性。

建立一個控制臺應用項目(InterfaceTest2),在Program.cs中定義一個接口1,這個接口是所以銀行賬戶必須實現的接口,包含最基本的功能。

?

[csharp]?view plain?copy
  • //賬戶接口1(所有銀行賬戶類都要繼承此接口)??
  • ????public?interface?IBankAccount??
  • ????{??
  • ????????void?PayIn(decimal?amount);//存錢函數??
  • ????????bool?Withdraw(decimal?amount);//取錢函數??
  • ????????decimal?Balance?{?get;?}//賬戶余額??
  • ????}??
  • 下面定義一個普通的屌絲銀行賬戶類(儲蓄賬戶),命名為SaverAccount,這個屌絲賬戶顯然必須要實現接口1,因為接口1中的功能是銀行規定的所以賬戶都要有的。

    ?

    ?

    [csharp]?view plain?copy
  • //賬戶類1,普通儲蓄賬戶??
  • ????public?class?SaverAccount?:?IBankAccount??
  • ????{??
  • ????????private?decimal?balance;??
  • ??
  • ????????public?void?PayIn(decimal?account)??
  • ????????{??
  • ????????????balance?=?balance?+?account;??
  • ????????}??
  • ??
  • ????????public?bool?Withdraw(decimal?amount)??
  • ????????{??
  • ????????????if?(balance?>?amount)??
  • ????????????{??
  • ????????????????balance?=?balance?-?amount;??
  • ????????????????return?true;??
  • ????????????}??
  • ????????????Console.WriteLine("余額不足!");??
  • ????????????return?false;??
  • ????????}??
  • ??
  • ????????public?decimal?Balance??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?balance;??
  • ????????????}??
  • ????????}??
  • ??
  • ????????public?override?string?ToString()??
  • ????????{??
  • ????????????return?String.Format("Saver?Bank?balance:",balance);??
  • ????????}??
  • ????}??
  • 從屌絲賬戶中可以看出,SaverAccount類實現了所有繼承自接口IBankAccount的方法,不然編譯會報錯。普通賬戶有存錢(PayIn)、取錢(Withdraw)和獲取賬戶余額的方法,具體方法很簡單,不在細說。

    ?

    ?

    下面再定義一個接口2,接口2中包含有高級銀行賬戶的一些額外功能。

    ?

    [csharp]?view plain?copy
  • //賬戶接口2(高級銀行賬戶要繼承此接口)??
  • ????public?interface?IBankAdvancedAccount??
  • ????{??
  • ????????void?DealStartTip();//交易開始提示功能??
  • ????????void?DealStopTip();//交易結束提示功能??
  • ????}??
  • 接著定義一個金卡賬戶,顯然,這個金卡賬戶必須實現接口1,同時還要有體現自身價值的其他方法,就是實現接口2。

    ?

    ?

    [csharp]?view plain?copy
  • //賬戶類2,金卡賬戶??
  • ????public?class?GoldAccount?:?IBankAccount,?IBankAdvancedAccount??
  • ????{??
  • ????????private?decimal?balance;??
  • ??
  • ????????public?void?PayIn(decimal?account)??
  • ????????{??
  • ????????????balance?=?balance?+?account;??
  • ????????}??
  • ??
  • ????????public?bool?Withdraw(decimal?amount)??
  • ????????{??
  • ????????????if?(balance?>?amount)??
  • ????????????{??
  • ????????????????balance?=?balance?-?amount;??
  • ????????????????return?true;??
  • ????????????}??
  • ????????????Console.WriteLine("余額不足!");??
  • ????????????return?false;??
  • ????????}??
  • ??
  • ????????public?decimal?Balance??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?balance;??
  • ????????????}??
  • ????????}??
  • ??
  • ????????public?override?string?ToString()??
  • ????????{??
  • ????????????return?String.Format("Saver?Bank?balance:",?balance);??
  • ????????}??
  • ??
  • ????????public?void?DealStartTip()//金卡客戶,在交易開始的時候,必須實現這個函數??
  • ????????{??
  • ????????????Console.WriteLine("交易開始,請注意周圍環境");??
  • ????????}??
  • ??
  • ????????public?void?DealStopTip()//金卡客戶,在交易結束的時候,必須實現這個函數??
  • ????????{??
  • ????????????Console.WriteLine("交易結束,請帶好您的貴重物品,歡迎下次光臨!");??
  • ????????}??
  • ????}??
  • 由金卡賬戶類GoldAccount可以看出,除了具有屌絲賬戶類SaverAccount所具有的存錢、取錢、查詢余額的功能外,還具有一些金卡賬戶彰顯尊貴身份的獨特功能,那就是DealStartTip()和DealStopTip(),提示用戶注意安全的高級功能。

    ?

    ?

    下面是整個項目的代碼,當然這里為了方便將接口和類都寫在了一起。

    ?

    [csharp]?view plain?copy
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.Linq;??
  • using?System.Text;??
  • ??
  • namespace?InterfaceTest2??
  • {??
  • ????class?Program??
  • ????{??
  • ????????static?void?Main(string[]?args)??
  • ????????{??
  • ????????????SaverAccount?sa?=?new?SaverAccount();//實例化一個普通賬戶??
  • ????????????//普通賬戶實現接口1,具有存錢、取錢、查看賬戶的功能??
  • ????????????sa.PayIn(1000);//普通賬戶能夠存錢,存入1000??
  • ????????????sa.Withdraw(500);//普通賬戶能夠取錢,取出500??
  • ????????????Console.WriteLine("普通卡賬戶余額:{0}",sa.Balance);??
  • ??
  • ????????????GoldAccount?ga?=?new?GoldAccount();//實例化一個金卡賬戶??
  • ????????????ga.DealStartTip();//金卡賬戶還必須具有接口2的功能,為客戶提供額外的服務??
  • ????????????ga.PayIn(10000);//金卡賬戶具有所有賬戶的基本功能?存錢10000??
  • ????????????ga.Withdraw(5000);//取錢500??
  • ????????????Console.WriteLine("金卡賬戶余額:{0}",?ga.Balance);??
  • ????????????ga.DealStopTip();??
  • ??
  • ????????????Console.ReadLine();??
  • ????????}??
  • ????}??
  • ??
  • ????//賬戶接口1(所有銀行賬戶類都要繼承此接口)??
  • ????public?interface?IBankAccount??
  • ????{??
  • ????????void?PayIn(decimal?amount);//存錢函數??
  • ????????bool?Withdraw(decimal?amount);//取錢函數??
  • ????????decimal?Balance?{?get;?}//賬戶余額??
  • ????}??
  • ??
  • ????//賬戶接口2(高級銀行賬戶要繼承此接口)??
  • ????public?interface?IBankAdvancedAccount??
  • ????{??
  • ????????void?DealStartTip();//交易開始提示功能??
  • ????????void?DealStopTip();//交易結束提示功能??
  • ????}??
  • ??
  • ????//賬戶類1,普通儲蓄賬戶??
  • ????public?class?SaverAccount?:?IBankAccount??
  • ????{??
  • ????????private?decimal?balance;??
  • ??
  • ????????public?void?PayIn(decimal?account)??
  • ????????{??
  • ????????????balance?=?balance?+?account;??
  • ????????}??
  • ??
  • ????????public?bool?Withdraw(decimal?amount)??
  • ????????{??
  • ????????????if?(balance?>?amount)??
  • ????????????{??
  • ????????????????balance?=?balance?-?amount;??
  • ????????????????return?true;??
  • ????????????}??
  • ????????????Console.WriteLine("余額不足!");??
  • ????????????return?false;??
  • ????????}??
  • ??
  • ????????public?decimal?Balance??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?balance;??
  • ????????????}??
  • ????????}??
  • ??
  • ????????public?override?string?ToString()??
  • ????????{??
  • ????????????return?String.Format("Saver?Bank?balance:",balance);??
  • ????????}??
  • ????}??
  • ??
  • ????//賬戶類2,金卡賬戶??
  • ????public?class?GoldAccount?:?IBankAccount,?IBankAdvancedAccount??
  • ????{??
  • ????????private?decimal?balance;??
  • ??
  • ????????public?void?PayIn(decimal?account)??
  • ????????{??
  • ????????????balance?=?balance?+?account;??
  • ????????}??
  • ??
  • ????????public?bool?Withdraw(decimal?amount)??
  • ????????{??
  • ????????????if?(balance?>?amount)??
  • ????????????{??
  • ????????????????balance?=?balance?-?amount;??
  • ????????????????return?true;??
  • ????????????}??
  • ????????????Console.WriteLine("余額不足!");??
  • ????????????return?false;??
  • ????????}??
  • ??
  • ????????public?decimal?Balance??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?balance;??
  • ????????????}??
  • ????????}??
  • ??
  • ????????public?override?string?ToString()??
  • ????????{??
  • ????????????return?String.Format("Saver?Bank?balance:",?balance);??
  • ????????}??
  • ??
  • ????????public?void?DealStartTip()//金卡客戶,在交易開始的時候,必須實現這個函數??
  • ????????{??
  • ????????????Console.WriteLine("交易開始,請注意周圍環境");??
  • ????????}??
  • ??
  • ????????public?void?DealStopTip()//金卡客戶,在交易結束的時候,必須實現這個函數??
  • ????????{??
  • ????????????Console.WriteLine("交易結束,請帶好您的貴重物品,歡迎下次光臨!");??
  • ????????}??
  • ????}??
  • }??
  • ?

    ?

    由程序的入口處可以看出,屌絲用戶sa只能存錢、取錢和查看余額,感覺很傻。金卡用戶ga還能在交易開始和結束的時候收到銀行額外的關懷(提示用戶注意安全)。

    由此可以想到,首先接口具有約束作用,可以限定類必須實現某些功能;其次,接口減少了代碼量,便于擴展,比如銀行 賬戶等級越高,所具有的功能就越多(實現更多的接口);再次,規范多個開發人員的代碼,比如屌絲賬戶類由程序猿A來寫,金卡賬戶類由程序猿B來寫,那么我告訴AB這兩個賬戶都要實現接口1,則A、B寫的類中相同函數的函數名稱就一致了。

    Over,感覺說的很詳細了,睡覺!

    ?

    轉載于:https://www.cnblogs.com/dare/p/8565444.html

    總結

    以上是生活随笔為你收集整理的C# 接口的作用浅谈举例(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91精品一区二区三区在线观看 | 精品亚洲一区二区三区 | 国产日日操 | 性日韩 | 亚洲午夜久久久久久久国产 | 狠狠干夜夜骑 | 婷婷亚洲一区 | 在线观看黄色片网站 | 超碰在线最新 | 韩国bj大尺度vip福利网站 | 美女无遮挡免费网站 | 好吊色视频一区二区 | 欧美18av | 欧美热热| 国产喷白浆一区二区三区 | 亚洲精品3| 一级黄色大片视频 | 欧美少妇毛茸茸 | 亚洲欧美国产日韩精品 | 午夜影院在线看 | 国产美女永久免费 | 欧美国产日韩一区 | 伊人久久大香网 | 看日本黄色录像 | 欧美成人免费大片 | 熟女自拍一区 | 国产一区福利 | 亚洲人体一区 | 91视频免费看 | 干欧美 | av综合久久 | 欧美日韩精品中文字幕 | 日产精品久久久久久久蜜臀 | 天天综合一区 | 青青操在线观看视频 | 日本黄色网页 | 极度诱惑香港电影完整 | 色婷久久 | 国产精品久久无码一三区 | 日韩xxx视频 | 青在线视频 | 黄色小视频免费在线观看 | 精品国产1区2区 | 国产情侣久久 | 天天草天天爽 | 国产尤物在线 | 久久久久亚洲AV成人网人人小说 | 激情欧美一区二区三区精品 | 日韩成人无码 | 夜夜撸影院| 亚洲欧美日本一区二区三区 | 俄罗斯色片 | www成人免费视频 | 色男人天堂av | 一区二区自拍 | 日韩h在线 | 亚洲美女影院 | 少妇xxxx69| 中文字幕在线视频一区 | 秋霞欧美在线观看 | 亚洲av永久纯肉无码精品动漫 | 久久蜜臀精品av | 国产在线v| 日韩午夜伦 | 玖玖玖国产精品 | 国产做爰xxxⅹ性视频国 | 欧美成人三级在线视频 | 欧美三级网站在线观看 | 国产色无码精品视频国产 | 91大神福利视频 | 日本在线三级 | 国产一区欧美一区 | 亚洲无毛视频 | 色香影院| 国产精品夜色一区二区三区 | 免费av网站在线 | 99re在线精品视频 | 在线看黄网址 | 性色av免费 | 亚洲国产影视 | 亚洲成人精品久久久 | 日本成人综合 | 9.1在线观看免费 | 欧美久久一区二区三区 | 国产精品无码AV无码国产 | 国产电影免费观看高清完整版视频 | 日本午夜视频在线观看 | 国语对白做受xxxxx在线中国 | 免费污污视频在线观看 | 无套在线观看 | a级淫片 | 日韩在线不卡av | 欧美激情在线一区二区 | 美国三级视频 | 久久久久无码精品国产sm果冻 | 国产精品一区在线播放 | 国产伦精品一区二区三区视频我 | 91成人福利 | 免费日韩一区二区 |