日韩性视频-久久久蜜桃-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| 青青青草国产 | 乖女从小调教h尿便器小说 欧美韩一区二区 | 久操网站 | 国产小视频一区 | 色av一区二区三区 | 午夜激情一区 | 久久咪咪 | 中文字幕在线二区 | 无码国产精品一区二区色情男同 | 久久综合丁香 | 伊人网影院 | 日本无翼乌邪恶大全彩h | 蜜桃久久一区二区三区 | 性做久久久久久久久 | 亚洲自拍偷拍欧美 | 欧美成人猛片aaaaaaa | 亚洲在线免费观看 | 日韩a∨ | 亚洲精品男人天堂 | 少妇闺蜜换浪荡h肉辣文 | 三级视频在线 | 国产中年熟女高潮大集合 | 久久久久久电影 | 国产精品久久久爽爽爽麻豆色哟哟 | 小柔好湿好紧太爽了国产网址 | 熟女人妻在线视频 | 91人人澡人人爽 | 日韩精品91 | 国产视频在线观看一区 | 操碰在线视频 | 91麻豆精品国产91 | 国产在线观看免费播放 | heyzo在线播放 | 男人天堂99 | 中国女人内精69xxxxxx | 5月婷婷6月丁香 | 欧美在线三区 | 国产免费高清视频 | 丁香激情婷婷 | 公车乳尖揉捏酥软呻吟 | 久久国产a| 精品久久久久久久中文字幕 | 欧美jizzhd精品欧美18 | 国产成人tv | 深夜福利一区二区三区 | 精品自拍偷拍 | 欧美亚洲综合在线 | 成人午夜视频在线 | 大j8福利视频导航 | 奇米影视7777| 亚洲v| 变态 另类 国产 亚洲 | 亚洲男人的天堂在线观看 | 成人亚洲一区 | 视频二区在线观看 | 亚洲天堂中文字幕在线 | 国内精品久| 亚洲精品在线免费看 | 激情综合六月 | 国产欧美日韩视频在线观看 | 麻豆精品免费 | 精品福利片| 一级久久久久久久 | 欧美成年人视频在线观看 | 禁断介护老人中文字幕 | 国产一在线观看 | 一区二区免费在线观看视频 | 女同在线视频 | 日本激情视频在线观看 | www.成人在线视频 | 九色网站在线观看 | 欧美三根一起进三p | 夜间福利在线观看 | 欧美高h视频 | 日韩精品中文字幕在线观看 | 全部孕妇毛片 | 亚洲综合激情小说 | 中文字幕一区二区三区在线观看 | 苍井空浴缸大战猛男120分钟 | 13日本xxxxxⅹxxx20 | 极品videosvideo喷水 | 丝袜制服中文字幕 | 狠狠人妻久久久久久综合蜜桃 | 亚洲高清毛片 | 欧美30p| 久久久在线视频 | sese综合| 欧美成人h版 | 久久99日 | 天堂影院一区二区 | 亚洲一区二区精品视频 | 撕开少妇裙子猛然进入 | 欧美老熟妇乱xxxxx | 99久久亚洲精品 | 久久噜噜色综合一区二区 | 91色在线观看| av先锋资源网 | 国产乱人伦精品 |