淺談c#介面的問題,適合新手來瞭解

来源:http://www.cnblogs.com/ldyblogs/archive/2017/09/19/interface.html
-Advertisement-
Play Games

這段時間的項目有用到介面,開始不是特別理解介面,只是單單知道介面定義非常簡單,甚至覺得這個介面只是多此一舉(個人開發的時候)。現在開始團隊開發,才發現介面原來是這麼的重要和便捷! 接下來就來談談我這段時間對介面使用的粗淺見解,說的對希望大家贊,說的有誤的地方希望大家多多包涵建議! READY GO! ...


這段時間的項目有用到介面,開始不是特別理解介面,只是單單知道介面定義非常簡單,甚至覺得這個介面只是多此一舉(個人開發的時候)。現在開始團隊開發,才發現介面原來是這麼的重要和便捷!

接下來就來談談我這段時間對介面使用的粗淺見解,說的對希望大家贊,說的有誤的地方希望大家多多包涵建議!

READY GO!

介面的定義就不多說了,它有一個很重要的知識點,就是所有繼承這個介面類的都必須實現介面中的定義,說到這個必須,在團隊開發中,只要我們商定好了介面,那我們的代碼是不是就統一了!!!

這是我覺得介面重要的第一點:它便於我們統一項目的規定,便於團隊代碼的管理!

再來用一個例子說明:

A公司決定開發一套動物系統,其中包含很多的動物,公司決定要實現每個動物的喊叫行為……

說到這裡,我們一般就是各個程式員拿到自己要實現的動物類之後就開始大刀闊斧的開幹了!!!

X程式員實現狗這個類,他寫一個叫喊方法void Han(){……}

Y程式員實現貓這個類,他寫一個叫喊方法void Shout(){……}

M程式員實現豬這個類,他寫一個叫喊方法 void Shout(string content){……}

………………

好了,現在都完成了各自需要完成的動物,隔壁老王開始來實現百獸齊鳴!!!!&¥%¥*%¥¥%¥一頓粗口爆出!這要怎麼寫?一個個去調用???

來看看,X程式員英語不太好,也沒有過多的去管,只是寫出動物叫喊的方法,Y程式員和M程式員寫的叫喊方法名稱是一樣,但M程式員中還要傳遞動物叫喊的內容!!!!!

隔壁老王現在要讓所有動物都叫一遍就得一個動物一個動物的去調用方法……

OK,接下來開會商量,隔壁老王定義一個動物介面,所有的動物類都得繼承這個介面,這個介面只定義一個void Shout();  (就不過多的寫東西啦,偷偷懶)

X,Y,M程式員繼承後,X,M立馬就發現有問題,然後開始改了自己手中的類

這時老王就開始來百獸齊鳴啦!哈哈哈哈哈

接下來貼出代碼大家看

介面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    /// <summary>
    /// 動物介面
    /// </summary>
    interface IAnimal
    {
        /// <summary>
        /// 動物叫喊
        /// </summary>
        void Shout();
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    /// <summary>
    ////// </summary>
    public class Dog:IAnimal
    {
        public void Shout()
        {
            Console.WriteLine("汪汪汪");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    /// <summary>
    ////// </summary>
    public class Cat:IAnimal
    {
        public void Shout()
        {
            Console.WriteLine("喵喵喵");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    /// <summary>
    ////// </summary>
    public class Pig:IAnimal
    {
        public void Shout()
        {
            Console.WriteLine("豬怎麼叫來著??豬叫");
        }
    }
}

隔壁老王來實現百獸齊鳴(打倒老王這種人物的存在)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    class Program
    {
        static void Main(string[] args)
        {
            //百獸齊鳴(這裡可以使用反射來初始化所有繼承IAnimal的所有動物,我就不寫這個了,主要看介面)
            List<IAnimal> animals = new List<IAnimal>();
            IAnimal dog = new Dog();
            animals.Add(dog);
            IAnimal cat = new Cat();
            animals.Add(cat);
            IAnimal pig = new Pig();
            animals.Add(pig);
            //所有動物都叫一遍
            for (int i = 0; i < animals.Count; i++)
            {
                animals[i].Shout();
            }

            
        }
    }
}

我對這個介面的粗略見解就說完啦!介面這個東西雖然用起來很簡單,但我們還是要理解這個介面的作用,希望我的這篇文章能夠讓更多像我一樣的新手向介面這個東西邁出第一步

以上動圖由“圖鬥羅”提供(百度一下)


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

-Advertisement-
Play Games
更多相關文章
  • 給大家看個計算題,看看大家的算術能力。 0.1 +0.1 +0.1 - 0.3 等於幾? 大家可能會說這麼簡單的問題,是不是看不起我?肯定等於0啊。 如果大家直接算的是沒有問題的,但是如果用電腦呢? 見證奇跡的時刻到了,看代碼: 運行結果: 這是因為電腦的精度的問題,在電腦的內部存儲和運算的精 ...
  • 之前對於同步方法和使用async、await的非同步方法一直很迷惑。我覺得等待執行結果的非同步和同步方法有什麼區別嗎?他們的執行順序都是一樣的啊? 不是都需要等待執行結果嗎?今天翻了一下《C#高級編程》,才算搞清楚這裡面的差異,原來使用了async、await的非同步是不會阻塞線程的。 首先說說關於同步方 ...
  • 前言:將windows 下開發的 .net 控制台程式(連接Oracle資料庫)部署到 ubuntu 下步驟記錄 2017-09-19 實驗所用機器為虛擬機Ubuntu16.04 amd64 安裝Mono環境 首先添加Mono安裝源: vi /etc/apt/sources.list.d/mono. ...
  • public int UpdateRegdate(tj_book_patient regdatejson) { int temp; SqlParameter[] ps = new SqlParameter[]{ //實體類的欄位和存儲過程的參數對齊 new SqlParameter("@reg_da ...
  • 反射是.NET中的重要機制,通過反射,可以在運行時獲得程式或程式集中每一個類型(包括類、結構、委托、介面和枚舉等)的成員和成員的信息。有了反射,即可對每一個類型瞭如指掌。另外我還可以直接創建對象,即使這個對象的類型在編譯時還不知道。 反射的用途: (1)使用Assembly定義和載入程式集,載入在程 ...
  • 效果圖: C#後臺代碼 ...
  • OAuth 2.0註意事項: 1、 獲取access_token時,請使用POST 1 private static string GetAuthorization(string username, string password) 2 { 3 string authorization = stri ...
  • 泛型(generic)是C#語言2.0和通用語言運行時(CLR)的一個新特性。泛型為.NET框架引入了類型參數(type parameters)的概念。類型參數使得設計類和方法時,不必確定一個或多個具體參數,其的具體參數可延遲到客戶代碼中聲明、實現。這意味著使用泛型的類型參數T,寫一個類MyList ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...