c#學習相關系列之as和is的相關用法

一、子類和父類的關系

    public class Program{static void Main(string[] args){Animal animal = new Dog();// Dog dog = (Dog)new Animal(); 編譯成功,運行報錯Dog dog = (Dog)animal;Dog dog = new Dog();Animal animal = dog; //等價于Animal animal = new Dog();}}public class Dog:Animal{ }public class Animal{ }

上述代碼中子類是Dog,父類為Animal,子類和父類的關系主要記住為一下三點:

1、子類可以直接轉為父類

Animal animal = new Dog();

2、父類實例化后不能轉為子類,強制轉換后 能編譯但是運行報錯

Dog dog = (Dog)new Animal(); 編譯成功,運行報錯

3、子類可以轉為父類后再轉為其他子類

Animal animal = new Dog();
Dog dog = (Dog)animal;

二、 is和as用法和區別

????????is用于檢查對象是否與指定類型兼容,如果是,則返回true,否則返回false。is操作符不會拋出異常,因此它是一種安全的類型轉換方式。

????????as操作符用于將對象轉換為指定類型,如果對象與指定類型兼容,則返回轉換后的對象,否則返回null。與is操作符不同,as操作符不會拋出異常,因此它也是一種安全的類型轉換方式。

因為只有子類可以轉為父類,所以我們只能去判斷父類是不是子類的實例化類型,只能去判斷animal is dog,animal as dog,不能去判斷子類是否是父類如 dog is animal ,dog as animal!!!

用法示例:

        static void Main(string[] args){Animal animal1 = new Dog();if (animal1 as Dog!=null){Console.WriteLine("animal1 is dog");}else{Console.WriteLine("animal1 is not dog");}Animal animal2 = new Animal();if (animal2 as Dog != null){Console.WriteLine("animal2 is dog");}else{Console.WriteLine("animal2 is not dog");}var b1 = animal1 is Dog;var b2 = animal2 is Dog;Console.WriteLine(b1);Console.WriteLine(b2);Console.ReadKey();}}public class Dog:Animal{ }public class Animal{ }

通過將子類dog轉為animal1,則此時父類animal1 是dog類型,由此可以看出父類可以是子類dog類型,也可以是父類animal類型,所以is 和as 類型轉換關鍵字是對父類的用法!!


運行結果為:

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

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

相關文章

java多生產者多消費者模擬實現

package com.example.springboottestone.main;import java.util.LinkedList; import java.util.Queue;/*** 多生產者多消費者模型是指多個生產者線程同時向緩沖區中添加數據,同時多個消費者線程從緩沖區中獲取數據的并發模型。這種模型適用于需要高并發處理數據的場…

企業計算機服務器中了eking勒索病毒怎么辦,eking勒索病毒解密數據恢復

隨著計算機網絡技術的不斷發展與應用,企業的生產運營效率得到了極大提升,但網絡安全威脅一直存在,網絡威脅的技術也在不斷更新,給企業的數據安全帶來了嚴重威脅。在本月,云天數據恢復中心陸續接到很多企業的求助&#…

C++ Qt開發:Qt的安裝與配置

Qt是一種C編程框架,用于構建圖形用戶界面(GUI)應用程序和嵌入式系統。Qt由Qt公司(前身為Nokia)開發,提供了一套跨平臺的工具和類庫,使開發者能夠輕松地創建高效、美觀、可擴展的應用程序。其被廣…

Python---random庫

目錄 基本隨機數函數(): rand.seed() random() 擴展隨機數函數(): random庫包含兩類函數:基本隨機數函數,擴展隨機數函數 基本隨機數函數:seed(),random() 擴展隨機數函數:randint,getrandbits(),uniform(),randrange(),choice(),shuff…

猴子吃桃問題(for循環)

一只猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個;第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半加一個。到第N天早上想再吃時,見只剩下一個桃子了…

ECS云主機容量大于2TB,初始化Linux數據盤(parted)

本文為您介紹當容量大于2TB時,如何在Linux環境下適用parted分區工具初始化數據盤。 操作場景 本文以“CentOS 7.6 64位”操作系統為例,介紹當磁盤容量大于2TB時,如何使用parted分區工具在Linux操作系統中為數據盤設置分區,操作回…

SAP UI5 walkthrough step6 Modules

在SAPUI5 中,資源通常用作Modules,這個我們將用Message Toast 來實現告警功能 修改controller.js webapp/controller/App.controller.js sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast" ], (Controller, Mes…

Python中的Alpha-Beta剪枝算法:優化博弈樹搜索

標題:Python中的Alpha-Beta剪枝算法:優化博弈樹搜索 摘要:Alpha-Beta剪枝算法是一種用于優化博弈樹搜索的算法,能夠降低搜索的時間復雜度,提高程序的性能和效率。本文將介紹Alpha-Beta剪枝算法的原理,以及…

Java 1對1

文章目錄 前言 客戶端 服務器端 輸出線程端 End 前言 TCP(Transmission Control Protocol)是一種面向連接的、可靠的網絡傳輸協議,它提供了端到端的數據傳輸和可靠性保證。 本程序就是基于tcp協議編寫而成的。 利用 TCP 協議進行通信的…

js 復制粘貼板,當clipboardjs 不好使怎么辦?

最近項目中做一個很常見的復制粘貼的功能耽誤了比較長的時間特此記錄&#xff0c;在往常這個功能直接用 clipboard 做就行了&#xff0c;但是這次卻發現復制功能不好使了&#xff0c;雖然走了復制成功的回調&#xff0c;但是粘貼板并沒有復制的內容。代碼如下 <div v-for&q…

java實現冒泡排序算法

文章目錄 冒泡排序算法 冒泡排序算法 算法原理&#xff1a; 比較相鄰的元素。如果第一個比第二個大&#xff0c;就交換他們兩個。 對每一對相鄰元素做同樣的工作&#xff0c;從開始第一對到結尾的最后一對。在這一點&#xff0c;最后的元素應該會是最大的數。 針對所有的元素重…

Leetcode 345. Reverse Vowels of a String

Problem Given a string s, reverse only all the vowels in the string and return it. The vowels are ‘a’, ‘e’, ‘i’, ‘o’, and ‘u’, and they can appear in both lower and upper cases, more than once. Algorithm Collect all the vowels and reverse the…

人工智能教程(三):更多有用的 Python 庫

目錄 前言 推薦 JupyterLab 入門 復雜的矩陣運算 其它人工智能和機器學習的 Python 庫 前言 在本系列的上一篇人工智能教程&#xff08;二&#xff09;&#xff1a;人工智能的歷史以及再探矩陣中&#xff0c;我們回顧了人工智能的歷史&#xff0c;然后詳細地討論了矩陣。在…

【數據結構和算法】--- 棧

目錄 棧的概念及結構棧的實現初始化棧入棧出棧其他一些棧函數 小結棧相關的題目 棧的概念及結構 棧是一種特殊的線性表。相比于鏈表和順序表&#xff0c;棧只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的…

概率論之 證明 正態分布的上a 分位點的對稱的性質

公式(Z(a) -Z(1-a)) 表示正態分布的上(a)分位點與下(1-a)分位點在分布曲線上關于均值的對稱性。 左側 (Z(a))&#xff1a; 這是分布曲線上累積概率為(a)的那個點。也就是說&#xff0c;這是一個使得這個點及其左側的面積占據整個曲線下方(a)的位置。 右側 (Z(1-a))&#xff1…

Kubernetes(K8s 1.27.x) 快速上手+實踐,無廢話純享版

文章目錄 1 基礎知識1.1 K8s 有用么&#xff1f;1.2 K8s 是什么&#xff1f;1.3 k8s 部署方式1.4 k8s 環境解析 2 環境部署2.1 基礎環境配置2.2 容器環境操作2.3 cri環境操作2.4 harbor倉庫操作2.5 k8s集群初始化2.6 k8s環境收尾操作 3 應用部署3.1 應用管理解讀3.2 應用部署實…

[Firefly-RK3399] TFTP/NFS網絡啟動內核與Buildroot文件系統

?網絡啟動&#xff0c;是用 TFTP 在服務器下載內核、dtb 文件到目標機的內存中&#xff0c;同時可以用 NFS 掛載網絡根文件系統到目標機上&#xff0c;實現目標機的無盤啟動。 準備工作&#xff1a; Firefly-RK3399 板卡&#xff1b;路由器、網線&#xff1b;安裝有 NFS 和 …

微前端 前置知識2--- monorepo架構

目錄 前言 pnpm vs npm pnpm設計思想 硬連接 軟鏈接 &#xff08;符號鏈接&#xff09; 原理 pnpm 指令 monorepo架構 介紹 配置monorepo pnpm --filter 前言 我們采用的是微前端一個主應用&#xff0c;和多個子應用&#xff0c;我們肯定不會一個一個去install安裝…

uniapp微信小程序富文本、小程序富文本、rich-text解決video問題

我直接使用的 mp-html mp-html 相當好用&#xff0c;功能比較完善&#xff0c;也可以二次開發 具體的直接看官方文檔吧

Linux安全學習路標

1. 操作系統基礎知識 首先&#xff0c;你需要建立堅實的操作系統基礎知識&#xff0c;包括Linux文件系統和目錄結構、Linux進程管理、權限管理等基本概念。 2. 網絡和通信安全 學習關于網絡和通信安全的基礎知識&#xff0c;包括TCP/IP協議棧、網絡攻擊類型、防火墻配置、網…