精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在 C# 8 中使用默認接口方法

開發 后端
C# 8 中新增了一個非常有趣的特性,叫做 默認接口方法 (又稱虛擬擴展方法),這篇文章將會討論 C# 8 中的默認接口方法以及如何使用。

[[378847]]

本文轉載自微信公眾號「碼農讀書」,作者碼農讀書 。轉載本文請聯系碼農讀書公眾號。

 C# 8 中新增了一個非常有趣的特性,叫做 默認接口方法 (又稱虛擬擴展方法),這篇文章將會討論 C# 8 中的默認接口方法以及如何使用。

在 C# 8 之前,接口不能包含方法定義,只能在接口中定義方法簽名,還有一個就是接口的成員默認是 public 和 abstract , 在 C# 8 之前,接口不能包含字段,也不能包含private, protected, 或者 internal 的方法成員。如果你在接口中引入了一個新成員,默認情況下你必須更新實現該接口的所有子類。

在 C# 8 中可以在接口定義方法的默認實現,而且還可以定義接口成員為 private,protect,甚至是 static,還有一點挺奇葩的,一個接口的 protect 成員是不能被實現類所訪問的,相反,它只能在子接口中被訪問,接口的 virtual 成員可以由派生接口 override,但不能被派生類 override,還有一點請注意,接口目前還不能定義 實例成員。

為什么要使用默認接口方法

所謂的 默認接口方法 指的是接口中定義了一個默認實現的方法, 如果實現該接口的類沒有實現默認接口方法的話,那么這個 默認接口方法 只能從接口上進行訪問,這是一個很有用的特性,因為它可以幫助開發人員在不破壞現有功能的情況下向接口的未來版本添加新方法。

考慮下面的 ILogger 定義。

  1. public interface ILogger 
  2.    { 
  3.        public void Log(string message); 
  4.    } 

下面的兩個類擴展了ILogger接口并實現了Log()方法。

  1. public class FileLogger : ILogger 
  2.   { 
  3.       public void Log(string message) 
  4.       { 
  5.           //Some code 
  6.       } 
  7.   } 
  8.  
  9.   public class DbLogger : ILogger 
  10.   { 
  11.       public void Log(string message) 
  12.       { 
  13.           //Some code 
  14.       } 
  15.   } 

現在假設你想在ILogger接口中新增一個方法,該方法接受兩個參數:一個 文本 一個 日志級別,下面的代碼片段展示了日志級別的枚舉類。

  1. public enum LogLevel 
  2.   { 
  3.       Info, Debug, Warning, Error 
  4.   } 

修改后的 ILogger 接口如下:

  1. public interface ILogger 
  2.    { 
  3.        public void Log(string message); 
  4.        public void Log(string message, LogLevel logLevel); 
  5.    } 

好了,現在問題來了,因為 ILogger 中新增了一個 Log 方法,你必須要在所有實現該接口的所有子類中實現 Log(string message, LogLevel logLevel) 方法,這就很尷尬了,如果不這樣做的話,編譯器肯定是不會放行的,在現實情況下,這個接口實現類可能在多個 dll 中,甚至在多個團隊中,可想而知,這個工作量是非常大并且非常痛苦的。

默認接口方法案例

這就是 默認接口方法 的應用場景,你可以在接口中定義一個默認方法是實現,如下代碼所示:

  1. public interface ILogger 
  2.   { 
  3.       public void Log(string message); 
  4.  
  5.       public void Log(string message, LogLevel logLevel) 
  6.       { 
  7.           Console.WriteLine("Log method of ILogger called."); 
  8.           Console.WriteLine("Log Level: "+ logLevel.ToString()); 
  9.           Console.WriteLine(message); 
  10.       } 
  11.   } 

這個時候,實現 ILogger 接口的子類可以不實現新的 Log(string message, LogLevel logLevel) 方法,因此下面的代碼也是跑的通的,編譯器不會拋出任何錯誤。

  1. public class FileLogger : ILogger 
  2.    { 
  3.        public void Log(string message) 
  4.        { 
  5.            //Some code 
  6.        } 
  7.    } 
  8.  
  9.    public class DbLogger : ILogger 
  10.    { 
  11.        public void Log(string message) 
  12.        { 
  13.            //Some code 
  14.        } 
  15.    } 

默認接口方法不能被繼承

現在創建一個 FileLogger 類實例,然后直接調用新的帶參數的 Log() 方法,如下代碼所示:

  1. FileLogger fileLogger = new FileLogger(); 
  2. fileLogger.Log("This is a test message.", LogLevel.Debug); 

從上面圖可看出 默認接口方法 不能被子類繼承,換句話說,子類根本就不知道接口中還有帶參數的 Log() 方法。

默認接口方法和菱形問題

現在有一個非常重要的問題,默認接口方法如何避免 菱形問題?換句話說就是 接口的 多繼承 問題,考慮下面的代碼清單。

  1. public interface A 
  2.     { 
  3.         public void Display(); 
  4.     } 
  5.  
  6.     public interface B : A 
  7.     { 
  8.         public void Display() 
  9.         { 
  10.             Console.WriteLine("Interface B."); 
  11.         } 
  12.     } 
  13.  
  14.     public interface C : A 
  15.     { 
  16.         public void Display() 
  17.         { 
  18.             Console.WriteLine("Interface C."); 
  19.         } 
  20.     } 
  21.  
  22.     public class MyClass : B, C 
  23.     { 
  24.  
  25.     } 

當編譯上面代碼時,會拋出一個編譯錯誤,說 MyClass 沒有實現 A.Display() 方法,解決這個問題很簡單,在 MyClass 中實現一下接口方法就可以了,如下代碼所示:

  1. public interface A 
  2.     { 
  3.         public void Display(); 
  4.     } 
  5.     public interface B : A 
  6.     { 
  7.         public void Display() 
  8.         { 
  9.             Console.WriteLine("Interface B."); 
  10.         } 
  11.     } 
  12.     public interface C : A 
  13.     { 
  14.         public void Display() 
  15.         { 
  16.             Console.WriteLine("Interface C."); 
  17.         } 
  18.     } 
  19.     public class MyClass : B, C 
  20.     { 
  21.         public void Display() 
  22.         { 
  23.             Console.WriteLine("MyClass."); 
  24.         } 
  25.     } 

接下來就可以生成 MyClass 實例了,然后再調用 Display() 方法,如下代碼所示:

  1. static void Main(string[] args) 
  2.         { 
  3.             A obj = new MyClass(); 
  4.             obj.Display(); 
  5.             Console.Read(); 
  6.         } 

現在問題來了,到底是哪一個 Display() 方法被調用了呢?為了避免歧義,C# 將會使用最近覆蓋規則,即 Class.Display() 方法被最先調用。

抽象類 VS 接口

到這里,我想你肯定有疑問,抽象類 和 接口 是不是很相似了,甚至可以互換了?雖然抽象類和接口現在看起來在很多方面都很相似,但兩者之間還是有微妙的區別的,具體如下:

  • 抽象類可以有實例成員,接口則不能。
  • 抽象類不能多繼承,接口還是可以的。

默認接口方法 允許開發人員利用 trait 編程技術,該技術可以讓那些附屬于該方法的不相關類型得以繼續使用,可能你有點懵,我舉個例子:假設你構建好了一個dll,被很多的開發人員所使用,現在你要發布該 dll 的新版本,比如說往接口中添加了新方法,這個時候你可以定義默認實現,這樣就可以對已使用的開發者進行無感升級。

譯文鏈接:https://www.infoworld.com/article/3455239/how-to-use-default-interface-methods-in-csharp-8.html

 

責任編輯:武曉燕 來源: 碼農讀書
相關推薦

2021-02-01 12:36:59

C# Channels存儲

2021-01-18 05:18:18

C# 8模式C# 7

2021-01-19 05:30:55

C# 8異步流IEnumerable

2021-01-22 05:53:08

C# IndexRange

2020-12-31 07:31:10

C# 反射數據

2021-03-07 16:37:52

C#應用程序

2025-05-12 03:10:00

接口方法代碼

2022-05-17 08:25:10

TypeScript接口前端

2009-08-04 10:29:06

在C#中使用存儲過程

2021-11-25 00:04:16

C# 插值字符串

2023-01-28 17:41:07

Java代碼

2019-04-23 15:20:26

JavaScript對象前端

2018-08-03 08:37:31

設計模式IT項目GDPR

2009-08-14 17:58:05

C#接口方法

2009-04-03 13:20:05

C#擴展方法調用

2024-01-18 08:37:33

socketasyncio線程

2022-06-23 08:00:53

PythonDateTime模塊

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-03-09 07:27:40

Kafka開源分布式

2011-08-10 09:31:41

Hibernateunion
點贊
收藏

51CTO技術棧公眾號

日本xxxx人| 不卡的免费av| 国产精品高清一区二区| 一区二区三区美女视频| 精品在线视频一区二区| 中文字幕一二区| 欧美精品午夜| 亚洲女同性videos| 国产又粗又猛大又黄又爽| 18videosex性欧美麻豆| 97se狠狠狠综合亚洲狠狠| 国产精品成av人在线视午夜片| 69夜色精品国产69乱| 欧美黑人巨大videos精品| 欧美日韩美女一区二区| 黄页免费在线观看视频| 调教视频免费在线观看| 99在线精品免费| 成人亲热视频网站| 黄色片网站在线免费观看| 中文字幕一区二区三区欧美日韩| 亚洲欧美在线一区二区| 天天爽夜夜爽视频| 国产精品亚洲d| 亚洲国产日韩精品| 亚洲最大色综合成人av| 无码精品在线观看| 丁香五精品蜜臀久久久久99网站 | 日本在线播放一区二区三区| 欧美精品激情在线观看| 91免费公开视频| 欧美日韩国产高清电影| 欧美v亚洲v综合ⅴ国产v| 在线观看免费的av| www成人在线视频| 欧美日韩精品国产| 亚洲熟妇无码一区二区三区| 羞羞的视频在线看| 成人欧美一区二区三区在线播放| 日本一区二区三区在线视频| 天堂av在线播放| 成人免费黄色在线| 99国产盗摄| 亚洲AV午夜精品| 国产成人免费视频网站| 91传媒在线免费观看| 99国产精品久久久久久久成人| 秋霞国产午夜精品免费视频| 国产成人精品a视频一区www| 欧美啪啪小视频| 免费永久网站黄欧美| 91av在线影院| 久草手机在线视频| 免费中文字幕日韩欧美| 欧美中文字幕精品| 亚洲久久在线观看| 久久久亚洲一区| 国产va免费精品高清在线| 中文在线第一页| 三级亚洲高清视频| 国产精品久久久久久久久久三级 | 蜜桃av一区二区三区电影| 国产999精品久久久影片官网| 中文字幕黄色片| 日韩成人午夜电影| 国产热re99久久6国产精品| 在线观看黄色网| 国产一区二区三区久久久| 亚洲最大的网站| 免费av网站观看| 99精品黄色片免费大全| 免费在线成人av| av亚洲在线| 亚洲精品自拍动漫在线| 免费拍拍拍网站| 国产精品迅雷| 欧美日韩国产另类一区| 性生交大片免费看l| 国产精东传媒成人av电影| 日韩精品一区二区三区第95| 成人在线观看免费高清| 亚洲影视一区| 97香蕉超级碰碰久久免费软件 | 日韩黄色小视频| 成人a级免费视频| 亚洲国产精品视频在线| 91在线丨porny丨国产| 视频一区视频二区视频三区视频四区国产 | 亚洲小说欧美另类激情| 国产理论电影在线| 91精品91久久久中77777| 亚洲欧美aaa| 欧美freesex8一10精品| 日韩在线观看免费网站 | 欧洲一区在线观看| 日本精品一二三| 国产伦一区二区三区| 久久手机免费视频| 国产午夜性春猛交ⅹxxx| 久久精品国产77777蜜臀| 国产欧美一区二区在线播放| jizz在线观看视频| 激情av一区二区| 亚洲天堂av一区二区三区| 日本一区福利在线| 久久久精品国产| 欧美成人一区二区三区四区| 国产suv精品一区二区883| 日韩福利视频| av女在线播放| 欧美一卡二卡三卡| 五月天综合视频| 亚洲精品四区| 91久久极品少妇xxxxⅹ软件 | 国产女女做受ⅹxx高潮| 视频成人永久免费视频| 色妞久久福利网| 亚洲第一网站在线观看| 不卡一区中文字幕| 国产四区在线观看| 成人在线视频观看| 亚洲人成电影在线观看天堂色| 久草视频免费在线播放| 精品在线你懂的| 日本亚洲欧洲精品| 在线黄色的网站| 亚洲成人性视频| 激情五月婷婷小说| 国产一区视频导航| 一区二区国产日产| 国产精成人品2018| 亚洲欧洲日产国码av系列天堂| 精品在线视频免费| 国产99精品在线观看| 黄色小视频大全| 亚洲精品66| 日韩一区二区在线视频| 亚洲视屏在线观看| 日本一区二区三区久久久久久久久不| 大陆极品少妇内射aaaaa| 精品网站aaa| 国自在线精品视频| 少妇又色又爽又黄的视频| 亚洲一区二区三区四区五区黄| 日本r级电影在线观看| 亚洲综合自拍| 91麻豆蜜桃| 色呦呦视频在线观看| 日韩一区二区三区三四区视频在线观看 | 午夜精品久久久99热福利| 国模人体一区二区| 亚洲成人黄色影院| 最近中文字幕无免费| 国产精品久久久久久久免费软件 | 国产一区二区视频在线免费观看 | 国产成人一区二区| jizz亚洲| 日韩写真欧美这视频| 国产精品白嫩白嫩大学美女| 国产成人av电影在线观看| 久久99久久久久久| 日韩av网站在线免费观看| 情事1991在线| 五月婷婷在线观看| 日韩欧美一区在线| 日韩xxxxxxxxx| 久久综合九色综合久久久精品综合| 国内外成人免费激情视频| 精品国产一区探花在线观看 | 黄色片视频在线播放| 欧美日韩在线播放视频| 成人激情视频在线观看| 久久电影网站| 亚洲欧美日韩国产中文| 91丨porny丨在线中文| 一区二区三区欧美日韩| 国产一级二级视频| 毛片av一区二区| 欧美在线观看视频免费| 琪琪久久久久日韩精品| 国产精品欧美日韩一区二区| 在线免费观看污| 精品无人国产偷自产在线| 中文字幕二区三区| 亚洲中国最大av网站| 国产男男chinese网站| 久久国产精品99久久人人澡| 97视频在线免费| 成人国产精品一级毛片视频| 91传媒视频免费| 日韩高清中文字幕一区二区| 久久国产精品网站| 青青国产在线| 日韩欧美aaaaaa| 伦av综合一区| 亚洲综合一区二区三区| 69xxx免费| 成人午夜大片免费观看| 91香蕉视频导航| 亚洲日韩成人| 日本黄色a视频| 经典一区二区| 国产精品二区三区四区| 国产人妖一区| 欧美最猛性xxxxx免费| a视频在线播放| 一区二区在线免费视频| 欧美一级特黄aaaaaa| 欧美日韩亚洲高清一区二区| 亚洲精品1区2区3区| 亚洲精品视频在线观看网站| 欧美大波大乳巨大乳| 不卡一区在线观看| 国产黄色一区二区三区| 日本aⅴ亚洲精品中文乱码| 国产不卡一区二区视频| 91精品国产91久久久久久密臀| 欧美xxxx黑人又粗又长密月| 9l视频自拍九色9l视频成人| 91老司机在线| 日韩午夜电影免费看| 国产激情999| 26uuu亚洲电影| 78m国产成人精品视频| 免费av不卡在线观看| 日韩有码在线视频| av黄色在线观看| 国产一区二区三区免费视频| 欧美日韩国产中文字幕在线| 亚洲激情视频在线播放| 亚洲精品国产精品乱码不卡| 91精品久久久久久久99蜜桃| ,一级淫片a看免费| 欧美日韩午夜精品| 亚洲欧美日韩一区二区三区四区| 欧美日韩国产精品| 羞羞影院体验区| 五月婷婷另类国产| 日韩精品乱码久久久久久| 亚洲午夜久久久久久久久久久| 亚洲xxxx3d动漫| 亚洲卡通动漫在线| 欧美黑人精品一区二区不卡| 亚洲色图视频网| 精品人妻伦九区久久aaa片| 国产精品久久99| 国产精品suv一区二区88| 国产精品国产三级国产aⅴ入口 | 中文字幕中文字幕在线中高清免费版| 日韩有码在线观看| 中文字幕中文字幕在线十八区| 久久伊人色综合| 亚洲大胆人体大胆做受1| 欧美丰满少妇xxxx| 理论片午夜视频在线观看| 77777少妇光屁股久久一区| 九九精品调教| 韩剧1988在线观看免费完整版| 国产99在线| 热久久这里只有精品| 欧美日韩国产网站| 国产欧美日韩中文字幕| 精品一区二区三区亚洲| 99一区二区| 欧美日韩看看2015永久免费 | 男人影院在线观看| 欧美成人精品在线视频| 国内老司机av在线| 欧美伊久线香蕉线新在线| 91p九色成人| 91嫩草在线视频| 国产一区调教| 视频一区二区综合| 欧美日韩亚洲一区在线观看| 欧美成人xxxxx| 久久精品二区亚洲w码| 免费在线观看日韩av| 91美女福利视频| jizzjizz日本少妇| 亚洲一区二区美女| 中文字幕视频网站| 欧美精品v国产精品v日韩精品| 精品国产伦一区二区三区| 日韩国产精品亚洲а∨天堂免| 成人午夜影视| 欧美极品xxxx| 日韩中文视频| 成人片在线免费看| 国产亚洲一区| 免费看黄色a级片| 久久午夜精品一区二区| 极品人妻一区二区| 国产日韩欧美a| 国产无码精品视频| 欧美喷潮久久久xxxxx| 蜜臀久久久久久999| 日韩在线视频观看正片免费网站| av在线网页| 国产日韩专区在线| 亚洲另类av| 欧美中文字幕在线观看视频| 日韩av成人高清| 黄色性视频网站| 最新欧美精品一区二区三区| 国产成人精品片| 日韩午夜激情av| 亚乱亚乱亚洲乱妇| 国产91色在线|| 国产伦理久久久久久妇女 | 在线āv视频| 国产精品成人国产乱一区| 激情视频极品美女日韩| 综合久久国产| 视频一区在线视频| 人体私拍套图hdxxxx| 亚洲曰韩产成在线| 一级黄色片免费看| 亚洲天堂网在线观看| 乱馆动漫1~6集在线观看| 51成人做爰www免费看网站| 区一区二视频| 成人免费无码av| 97久久久精品综合88久久| 国内偷拍精品视频| 91精品国产91久久久久久一区二区| 番号在线播放| 日韩免费观看av| 美女少妇全过程你懂的久久 | 美女视频一区在线观看| 日本一区二区视频在线播放| 欧美性猛交xxxx乱大交极品| 天天爽夜夜爽夜夜爽| 高清欧美性猛交xxxx黑人猛交| 91精品啪在线观看国产爱臀| 免费的一级黄色片| 国产高清久久久| 欧美成欧美va| 日韩精品一区二区三区视频| 91一区二区三区在线| 成人精品视频99在线观看免费| 久久中文视频| 在线观看免费视频污| 悠悠色在线精品| 亚洲AV无码一区二区三区少妇| 欧美激情欧美激情| 精品国产一区二区三区不卡蜜臂| 国产xxxx振车| 99久久er热在这里只有精品15| 日韩精品在线不卡| 日韩精品在线第一页| 欧美日韩大片| 亚洲精品欧洲精品| 久久91精品国产91久久小草| 亚洲 欧美 变态 另类 综合| 欧美一区二区在线视频| 男女羞羞视频在线观看| 国产精品视频福利| 国产精品久久久久久久免费软件| 国产麻豆天美果冻无码视频| 日本韩国精品在线| 99reav在线| 不卡一区二区三区视频| 亚洲一区亚洲| 国产wwwwxxxx| 日韩欧美亚洲国产另类| xxxx成人| 日韩欧美电影一区二区| 精品在线一区二区三区| 九九在线观看视频| 亚洲精品一区二区久| 欧美综合影院| 免费看欧美黑人毛片| 久久久久国产精品麻豆| 一级黄色片网站| 久久青草精品视频免费观看| 最新精品国偷自产在线| aaa一级黄色片| 五月天网站亚洲| 天堂а√在线资源在线| 国产精品播放| 日韩不卡一区二区| 精品肉丝脚一区二区三区| 亚洲人在线视频| 精品视频国内| 韩国日本在线视频| 亚洲精品五月天| 日韩av成人| 亚洲一区美女视频在线观看免费| 日韩一级不卡| 黑人操日本美女| 日韩电影网在线| 国产精一区二区| 国产极品美女高潮无套久久久| 亚洲欧美国产毛片在线| 青青操在线视频| 91免费在线观看网站| 日韩黄色小视频| 日韩欧美亚洲国产| 久久久999精品免费| 综合伊思人在钱三区|