c#介面使用詳解

来源:http://www.cnblogs.com/theLife/archive/2017/05/15/6858666.html
-Advertisement-
Play Games

c 介面使用詳解 c 中介面隱式與顯示實現 c 中介面可以隱式實現、顯示實現,隱式實現更常使用、顯示實現較少使用 其區別在於 1. 顯示實現避免介面函數簽名衝突 2. 顯示實現只可以以介面形式調用 3. 顯示實現其子類需無法繼承介面 4. 隱式實現可以撕裂調用、可以介面調用 5. 隱式實現其子類可以 ...


c#介面使用詳解

c#中介面隱式與顯示實現

c#中介面可以隱式實現、顯示實現,隱式實現更常使用、顯示實現較少使用
其區別在於

  1. 顯示實現避免介面函數簽名衝突
  2. 顯示實現只可以以介面形式調用
  3. 顯示實現其子類需無法繼承介面
  4. 隱式實現可以撕裂調用、可以介面調用
  5. 隱式實現其子類可以繼承介面的實現
  6. 隱式實現可以使用虛函數、子類可以重載

定義介面:

interface IShowMsg
{
    void Show();
}

隱式實現示例:

class ShowMsgImplicit : IShowMsg
{
    public void Show()
    {
        Console.WriteLine("ShowMsgImplicit");
    }
}

顯示實現示例:

class ShowMsgExplicit : IShowMsg
{
    void IShowMsg.Show()
    {
        Console.WriteLine("ShowMsgExplicit");
    }
}

若使用:

var showMsgExplicit = new ShowMsgExplicit();
showMsgExplicit.Show();

將報錯,只能使用(showMsgExplicit as IShowMsg).Show();調用

介面在繼承中的使用

介面顯示實現是無法在繼承中保留的,若希望子類繼承介面的實現需使用隱式實現。

  1. 使用隱式實現
  2. 若子類可以overwrite請使用virtual關鍵字修飾實現函數
  3. 可以定義abstract類繼承介面,強制子類實現介面

父類實現介面:

class ShowMsgImplicit : IShowMsg
{
    public virtual void Show()
    {
        Console.WriteLine("ShowMsgImplicit");
    }
}

子類繼承父類之後可以重載或者預設使用父類方法實現介面。

抽象類實現介面:

abstract class ShowMsgAbstract : IShowMsg
{
    public abstract void Show();
}

子類繼承抽象類必須實現抽象方法實現介面。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.檢查和安裝與Perl相關的模塊 PT工具是使用Perl語言編寫和執行的,所以需要系統中有Perl環境。 依賴包檢查命令為: rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL 如果有依賴包確實,可以使用下麵的命令安 ...
  • 要瞭解cgroup實現原理,必須先瞭解下vfs(虛擬文件系統).因為cgroup通過vfs向用戶層提供介面,用戶層通過掛載,創建目錄,讀寫文件的方式與cgroup交互. ...
  • 多個獨立的rtf文件合併時,如果文件紙張方向存在橫向 縱向不一致時,文件之間需要插入分節符 開始文件去掉最後一個"}",中間文件去掉第一個"{"及最後一個"}",最後一個去掉第一個"{";文件如存在紙張方向不一致則需要在兩個文件之間插入分節符。 參考:http://www.aiuxian.com/a ...
  • 系統有些埠是我們平時用不到但是又存在危險的埠,例如139、135、445等埠,windows預設是開著的,這時我們可以手動關閉這些埠!下邊為大家介紹一種通過windows組策略來一次性關閉所有想要關閉的危險埠 系統有些埠是我們平時用不到但是又存在危險的埠,例如139、135、445等端 ...
  • 一.並行LINQ System.Linq名稱空間中包含的類ParallelEnumerable可以分解查詢的工作,使其分佈在多個線程上。 儘管Enumerable類給IEnumerable<T>介面定義了擴展方法,但ParallelEnumerable類的大多數擴展方法是ParallerQuery< ...
  • 原文鏈接:http://blog.csdn.net/hebbers/article/details/70332015 關鍵點在與 ...
  • 經常在項目中遇到定時任務的時候,通常第一個想到的是Timer定時器,但是這玩意功能太弱雞,實際上通常採用的是專業化的第三方調度框架,比如說 Quartz,它具有功能強大和應用的靈活性,我想使用過的人都非常瞭解,那麼本篇就來說說如何通過代碼和配置文件來進行job和trigger的配置。 一:常規的jo ...
  • 今天學習angularjs向資料庫添加數據。學習此篇,得從以往幾篇開始,因為那還有創建數據表等演示。現在來創建一個添加的存儲過程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[usp_Goods_I ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...