【C#補全計劃:類和對象(七)—— 重寫虛方法】

一、virtual和override

1. 問題引入:使用里氏替換原則時,使用父類容器裝載子類對象,若不使用virtual和override而是使用new,當子類調用兩個類共有的方法時,調用的是父類的方法而不是子類的方法:

using System;namespace Polymorphism
{class Program{static void Main(string[] args){// 使用new關鍵字隱藏父類方法Father son = new Son();son.fun(); // 輸出:調用父類fun()方法(son as Son).fun(); // 輸出:調用子類fun()方法}}// 使用new關鍵字隱藏父類方法class Father{public void fun(){Console.WriteLine("調用父類fun()方法");}}class Son : Father{public new void fun() // 使用new關鍵字隱藏父類方法{Console.WriteLine("調用子類fun()方法");}}
}

運行結果如下:

2. virtual:使父類的方法變為虛方法,可以被子類重寫

3. override:使子類的方法重寫父類的方法

4. 使用:

using System;namespace Polymorphism
{class Program{static void Main(string[] args){// 使用new關鍵字隱藏父類方法 Father son = new Son();son.fun(); // 輸出:調用父類fun()方法(son as Son).fun(); // 輸出:調用子類fun()方法// 使用override關鍵字重寫父類方法GameObject player = new Player();player.ATK(); // 輸出:Player攻擊(player as Player).ATK(); // 輸出:Player攻擊}}// 使用new關鍵字隱藏父類方法class Father{public void fun(){Console.WriteLine("調用父類fun()方法");}}class Son : Father{public new void fun() // 使用new關鍵字隱藏父類方法{Console.WriteLine("調用子類fun()方法");}}// 使用override關鍵字重寫父類方法class GameObject{public virtual void ATK(){Console.WriteLine("Gameobject攻擊");}}class Player : GameObject{public override void ATK() // 使用override關鍵字重寫父類方法{Console.WriteLine("Player攻擊");}}
}

運行結果如下:

二、保留父類行為

1. 關鍵字:base

2. 作用:調用父類的方法

3. 使用:

using System;namespace Polymorphism
{class Program{static void Main(string[] args){// 使用new關鍵字隱藏父類方法 Father son = new Son();son.fun(); // 輸出:調用父類fun()方法(son as Son).fun(); // 輸出:調用子類fun()方法// 使用override關鍵字重寫父類方法GameObject player = new Player();player.ATK(); // 輸出:Player攻擊(player as Player).ATK(); // 輸出:Player攻擊// 使用多態調用父類方法GameObject enemy = new Enemy();enemy.ATK(); // 輸出:Gameobject攻擊}}// 使用new關鍵字隱藏父類方法class Father{public void fun(){Console.WriteLine("調用父類fun()方法");}}class Son : Father{public new void fun() // 使用new關鍵字隱藏父類方法{Console.WriteLine("調用子類fun()方法");}}// 使用override關鍵字重寫父類方法class GameObject{public virtual void ATK(){Console.WriteLine("Gameobject攻擊");}}class Player : GameObject{public override void ATK() // 使用override關鍵字重寫父類方法{Console.WriteLine("Player攻擊");}}class Enemy : GameObject{public override void ATK() // 使用override關鍵字重寫父類方法{Console.Write("Enemy: ");base.ATK(); // 保留父類行為}}
}

運行效果如下:

? ? ? ? 今天的學習就到這里了。感謝閱讀。

? ? ? ? 再見!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93466.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TCPIP之常用協議

一、TCPIP之網絡支撐協議 1.ARP ARP是網絡層協議,在同一廣播域內,將IP地址解析成MAC地址. 1.1 無故ARP 請求型無故ARP 設備在網絡中不管是自動獲取ip地址還是手動配置ip地址,設備都會發送請求型無故ARP檢查這個ip地址是否有重復的。 應…

網絡之路24:VLAN基礎實驗

正文共:2345 字 18 圖,預估閱讀時間:3 分鐘目錄網絡之路第一章:Windows系統中的網絡0、序言1、Windows系統中的網絡 1.1、桌面中的網卡 1.2、命令行中的網卡 1.3、路由表 1.4、家用路由器網絡之路第二章:認識企業設備2…

基于Verilog的神經網絡加速器設計

本設計實現了一個高效的神經網絡加速器,專注于卷積神經網絡(CNN)的核心計算功能。該設計具有以下創新點: 并行處理架構:同時處理多個卷積窗口,提高計算吞吐量 動態權重加載:支持運行時更新卷積核權重 流水線優化:卷積、激活、池化三級流水線設計 可配置參數:支持不同尺寸…

基于springboot的零食商城的設計與實現/零食銷售系統的設計與實現

用戶:注冊,登錄,商品信息,團購商品,公告資訊,后臺管理,在線客服,購物車,個人中心管理員:登錄,個人中心,用戶管理,商品類型…

《劍指offer》-算法篇-位運算

題目二進制中“1”的個數代碼實現二進制中“1”的個數題目描述:輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。思路:求“1”的個數等價于求n-1與n進行“與”運算后不等于0所需要的運算次數。注意:這里的整數可能…

項目上線中的跨域問題

本文將深入解析跨域問題的本質,并提供實用的解決方案。引言 跨域問題可以說是前端開發者的"老朋友"了,特別是在項目從開發環境遷移到生產環境時,這個問題更是頻繁出現。許多開發者對跨域的理解停留在表面,導致在項目上線…

dubbo應用之3.0新特性(響應式編程)(2)

一、介紹 Dubbo 3.0 的響應式編程基于 Triple 協議和 Reactor/RxJava 實現,支持全鏈路異步非阻塞通信。它通過引入 Mono、Flux 等響應式類型,打通跨進程的數據流式傳輸,天然支持反壓、限流等控制能力。相比傳統基于 CompletableFuture 的異步方式,響應式編程更適用于高并發…

力扣-22.括號生成

題目鏈接 22.括號生成 class Solution {List<String> res new ArrayList<>();StringBuilder path new StringBuilder();void backtracking(int n, int left, int right) {if (left right 2 * n) {res.add(path.toString());return;}if (left < n) {path.a…

架構實戰——互聯網架構模板(“網絡層”技術)

目錄 一、負載均衡 1.1、DNS 1.1.1、DNS 負載均衡的優點 1.1.2、DNS 負載均衡的缺點 1.2、Nginx 、LVS 、F5 1.2.1、軟件和硬件的區別 1.2.2、4 層和 7 層的區別 二、CDN 三、多機房 3.1、同城多機房 3.2、跨城多機房 3.3、跨國多機房 四、多中心 本文來源:極客時間vip課程筆記…

TCP/IP 網絡編程面試題及解答

在Qt/C面試中&#xff0c;若涉及“熟悉TCP/IP網絡編程”&#xff0c;面試官通常會結合TCP/IP協議基礎、Qt網絡編程框架&#xff08;如Qt Network模塊&#xff09;、C網絡編程實現以及實際場景問題來提問。以下是常見面試題及解答&#xff1a; 一、TCP/IP協議基礎 1. TCP和UDP的…

unity開發中Hash、Queue、LinkedList簡單介紹

在Unity游戲開發中&#xff0c;除了Dictionary和List外&#xff0c;以下三種數據結構能高效解決特定問題場景&#xff1a;1. HashSet<T>&#xff1a;閃電級存在性檢查 核心特點&#xff1a;基于哈希表實現的高效集合&#xff0c;元素唯一且無視順序 優勢&#xff1a; O(1…

智慧園區:科技與生活的完美融合

在城市的喧囂中&#xff0c;我們常常渴望一片寧靜而充滿活力的綠洲。如今&#xff0c;隨著科技的飛速發展&#xff0c;智慧園區應運而生&#xff0c;它不僅滿足了我們對美好生活的向往&#xff0c;更以其獨特的魅力&#xff0c;成為現代城市中一道亮麗的風景線。今天&#xff0…

繼續打卡day6

383. 贖金信 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> us;for(auto c: ransomNote){us[c]; // 將字符串存儲}for(auto c: magazine){if(us.count(c)){us[c]-…

LIMA:大語言模型對齊的“少即是多”革命——原理、實驗與范式重構

“千樣本激活千億參數&#xff1a;重新定義大模型對齊的本質” LIMA&#xff08;Less Is More for Alignment&#xff09; 是由 Meta AI 聯合 卡內基梅隆大學 等機構于 2023年 提出的突破性大模型對齊框架&#xff0c;其核心顛覆了傳統對齊需海量數據的認知&#xff0c;證明僅用…

vite.config.js常用配置

vite.config.js常用配置 import { defineConfig } from vite import { resolve } from "path"; import vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue(), ], // 配置需要使用的插件列表base: ./, // 在生產中服務時的基本公共路徑publicD…

JVM知識點(2)

目錄 Java中可作為GC Roots的引用有哪幾種&#xff1f; finalize方法 垃圾回收算法 標記-清除 標記-復制 標記-整理 分代收集算法 為什么要用分代收集 標記復制的標記過程和復制會不會停頓 MinorGC&#xff0c;MajorGC&#xff0c;MixedGC&#xff0c;FullGC FullGC…

Java HashMap中的compute及相關方法詳解:從基礎到Kafka Stream應用

HashMap是Java集合框架中最常用的數據結構之一&#xff0c;它提供了高效的鍵值對存儲和檢索功能。在Java8中&#xff0c;HashMap引入了一系列新的原子性更新方法&#xff0c;包括compute()、computeIfAbsent()和computeIfPresent()等&#xff0c;這些方法極大地簡化了在Map中進…

【php中ssti模板注入講解】

php中場景模板 1. Smarty 使用安全模式來執行不信任的模板,只運行PHP白名單里的函數。 2. Twig 與Smarty類似,不過無法利用該模板的SSTI調用靜函數。 php常見模板入門 Smarty 不使用預先準備好的模板 使用預先準備好的模板 對值進行拼接后使用模板展示 設置在模板中…

Redis學習07-Redis的過期策略

Redis 過期策略 什么是過期策略 Redis 的過期策略用于管理設置了過期時間&#xff08;TTL&#xff09;的鍵&#xff0c;確保在鍵過期后能夠被及時刪除&#xff0c;從而釋放內存 整體策略 Redis 采用的是定期刪除惰性刪除的組合策略 1. 定期刪除 原理&#xff1a;周期性的從過期…

深入解讀c++(命名空間)

目錄 1關于命名空間 1.1是什么 1.2解決了什么問題 2.命名空間的定義 2.2命名空間的嵌套定義 3命名空間的特點 3.1命名空間不會影響生命周期 3.2命名空間只能在全局域里定義&#xff0c;當然嵌套定義時例外。 3.3在不同文件中定義相同名稱的命名空間 4.命名空間的使用 …