Unity3D 介面使用

来源:https://www.cnblogs.com/blog-196/archive/2018/10/05/9744505.html
-Advertisement-
Play Games

C#怎麼實現多繼承? 說起多繼承,首先大家可以想想這個問題:你知道在C#中怎麼實現多繼承嗎? 主流的答案無非2種。 答案一:用介面啊,一個類可以繼承自多個介面的。答案二:C#不支持多繼承,C++才支持多繼承,多繼承會讓代碼變得很亂,因此微軟在設計C#的時候放棄了多繼承。 先說說什麼是真正意義的多繼承 ...


C#怎麼實現多繼承?

說起多繼承,首先大家可以想想這個問題:你知道在C#中怎麼實現多繼承嗎?

主流的答案無非2種。

答案一:用介面啊,一個類可以繼承自多個介面的。
答案二:C#不支持多繼承,C++才支持多繼承,多繼承會讓代碼變得很亂,因此微軟在設計C#的時候放棄了多繼承。

先說說什麼是真正意義的多繼承。真正的多繼承應該是像C++那樣的,而不是說像在C#裡面一個類繼承了多個介面就叫多繼承。在C#中,如果一個類實現了多個介面,那麼要為每個介面寫實現,如果介面被多個類繼承,那麼就會有重覆的代碼,這顯然是無法接受的。

然而C++那樣的多繼承也確確實實給編碼帶來了很大的麻煩,我也相信微軟真的是因為意識到了多繼承的不合理之處才在C#中擯棄了這個特性。其他的在這裡就不多說了,請看案例

案例:

假如我們要寫一個背包系統,背包里自然有很多物品,那我們該怎麼識別 我們當前使用的是什麼物品呢?

筆者在這裡使用介面來簡單實現一個背包

 

IA.cs

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace abc
{
    public interface IA
    {
        void ItemFunction();
    }

}

 

HpScript.cs

using UnityEngine;
using abc;
public class HpScript : MonoBehaviour, IA
{
    public void ItemFunction()
    {
        ItmeDrugFunction();
    }

    void ItmeDrugFunction()
    {
        Debug.Log("Hp");
    }
}

Mpscript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using abc;
public class Mpscript : MonoBehaviour, IA
{
    void IA.ItemFunction()
    {
        ItmeDrugFunction();
    }
    void ItmeDrugFunction()
    {
        Debug.Log("Mp");
    }
}

SwordScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using abc;
public class SwordScript : MonoBehaviour, IA
{
    void IA.ItemFunction()
    {
        ItmeDrugFunction();
    }
    void ItmeDrugFunction()
    {
        Debug.Log("Swrod");
    }
}

Backpack.cs

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using abc;
public class Backpack : MonoBehaviour {

    public GameObject itme;
    internal Transform itmeChilld;
    void Start () {
      
        if(itme != null && itme.transform.GetChild(2) != null) //如果當前節點不為空並且它子節點第二個元素也不為空
        {
            itmeChilld = itme.transform.GetChild(2);
            itmeChilld.GetComponent<IA>().ItemFunction();    //使用介面訪問
            Debug.Log("Name : " + itmeChilld.name);
        }
    }
}

我們可以測試訪問以下,看看是不是我們想要的結果

經過測試 是我們想要的結果,就這樣一個簡單的背包就做好了。喜歡的請點個贊哦!


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

-Advertisement-
Play Games
更多相關文章
  • python中的多線程其實並不是真正的多線程,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多進程。 進程與線程的使用有很多相似之處,有關線程方面的知識請參考https://www.cnblogs.com/sfencs-hcy/p/9721362.html multiproc ...
  • 1.python基礎語法要扎實。 2.多實際動手練習,多練習題,比如Python處理文件,統計文件里的字元數,列印前十。 3.熟練運用python周邊庫。 Web:(flask、Django) 爬蟲: (request、pyquery) 資料庫:(mysql) 前端:(html、css、Javasc ...
  • 本文主要是簡單的總結了一下找工作的過程中,需要瞭解的一些C/C++的基礎知識點。 ...
  • 1.Mybatis-Generator下載 地址:https://github.com/mybatis/generator/releases 我使用的是 mybatis-generator-core-1.3.7 2.配置generatorConfig.xml 官網: http://www.mybat ...
  • 擴展類是一種靜態的一種類的調用方法,通過實例化進行調用。利用this進行指正該類,有參數的時候直接在後面追加參數。 ...
  • 自從學習.NET以來,優雅的編程風格,極度簡單的可擴展性,足夠強大開發工具,極小的學習曲線,讓我對這個平臺產生了濃厚的興趣,在工作和學習中也積累了一些開源的組件,就目前想到的先整理於此,如果再想到,就繼續補充這篇日誌,日積月累,就能形成一個自己的組件經驗庫。 分散式緩存框架: Microsoft V ...
  • 在類的設計中經常會有類或者方法要設置成private或者internal等方式,在使用中這麼做無可厚非,但是對單元測試的影響也頗大 對於private方法,那隻有做一個副本然後改成internal或public來測試 對於internal的類和方法可以直接利用[assembly]標簽來指定該類可以... ...
  • IdentityServer4是基於OpenID Connect and OAuth 2.0框架,OpenID Connect Core 1.0是IdentityServer4最重要的文檔 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...