第一階段C#基礎-15:面向對象梳理

面向對象對象三(四)大特征:封裝,繼承,多態,(抽象)

1_封裝

(1)封裝是指將數據(屬性)和行為(方法)組合在一個類中,并對外部隱藏對象的內部實現細節

(2)封裝的核心概念

  • 數據隱藏:將類內部數據設為私有,只通過公共方法訪問

  • 實現隱藏:隱藏類的內部實現細節,只暴露必要的接口

  • 保護數據的完整性:通過方法控制對數據的訪問和修改

(3)屬性的封裝:將字段設為私有的,利用屬性控制字段的訪問

(4)方法的封裝:將方法寫在類中,通過類的實例或者類名調用方法

(5)封裝的好處:

  • 數據保護:防止外部代碼直接修改對象內部的狀態

  • 靈活性:可以修改內部實現而不影響使用該類的代碼

  • 易于維護:將相關數據和操作組織在一起

  • 減少耦合:類之間通過明確定義的接口交互

  • 數據驗證:可以在設置屬性時添加驗證邏輯

2_繼承

(1)繼承允許我們基于現有的類創建新的類,實現代碼重用

(2)繼承的特點:

  • 單繼承:c#只支持單繼承,一個類只能繼承一個父類

  • 傳遞性:繼承關系可以多層傳遞

  • 所有的類都繼承自object:即使沒有顯示指定,所有的類都隱式繼承自System.Object

(3)繼承中的訪問修飾符:

  • public:任何代碼都可訪問

  • protected:只有類內部和派生類可訪問

  • private:只有類內部可訪問(默認)

  • internal:同一程序集內可訪問

  • protected internal:同一程序集或派生類可訪問

(4)繼承的基本語法:使用:

(5)子類的繼承函數:當調用子類的構造函數(無參和有參)時,會先調用父類的無參構造,想調用父類的有參構造,需要子類的有參構造使用base(參數),調用父類的有參構造

3_多態

(1)多態:同一個行為具有不同的表現形式和能力

(2)多態的分類:

  • 編譯時多態(靜態多態):通過方法重載(Method Overloading)和運算符重載(Operator Overloading)來實現。

  • 運行時多態(動態多態):通過繼承和接口,以及方法重寫來實現

(3)靜態多態在編譯過程中,通過方法重載和運算符重載來實現,也成為靜態綁定和早期綁定

動態多態在運行過程中,通過方法重寫,隱藏方法來實現,也稱之為動態綁定或者后期綁定

(4)方法重載:同一個函數名不同參數列表

(5)方法重寫:

通過virtual和override關鍵字實現

public class Shape
{public virtual void Draw(){Console.WriteLine("繪制一個形狀");}
}public class Circle : Shape
{public override void Draw(){Console.WriteLine("繪制一個圓形");}
}

通過new關鍵字實現

public class Shape
{public void Draw(){Console.WriteLine("繪制一個形狀");}
}public class Circle : Shape
{public new void Draw(){Console.WriteLine("繪制一個圓形");}
}

4_接口

(1)接口:使用java,asp.net等編寫的API接口。讓其他人通過相應的請求協議(如:http/https)來訪問。理解成“在接口服務器上定義多個方法,在客戶端上調用這些方法,這樣的一個過程,稱為請求接口。

(2)C#中的接口:定義一套規則,其他類實現規則。規則===》鍥約,合同。 接口必須實現,才能使用。接口也是多態性的表現。

5_類與方法

5.1 普通類:

(1)可以有實例成員,靜態成員 實例字段 靜態字段 實例方法 靜態方法 實例事件 靜態事件....不能由抽象方法

(2)訪問普通類的成員的時候,要先確定是靜態的還是非靜態(實例的);靜態 使用類名訪問;非靜態(實例的) 實例化對象訪問

5.2 靜態類

(1)普通類經過 stati 修飾之后 就會變成靜態類

(2)靜態類特點:

  • 靜態類不能實例化,即不能new,訪問靜態類中的成員的時候,通過靜態類本身

  • 靜態類內部不能有非靜態成員,只能由靜態成員

  • 靜態類不支持繼承,不能繼承其他類,也不能被其它類繼承

  • 靜態類中的構造函數必須是靜態的,而且不能有訪問修飾符

(3)靜態類作用:封裝工具類

5.3 抽象類

(1)抽象類和接口類似,都是為了制定一些規則,由子類去實現這些成員,而不是直接操作抽象類和接口

(2)能夠被其他的類繼承 也能繼承其他的類 但是它里面的抽象方法不能實現

(3)不能實例 抽象類設計出來就是用來被繼承的 和密封類是相對

(4)抽象類特點:

  • 抽象類使用abstract 修飾

  • 抽象類中可以實例成員,可以抽象成員 可以有靜態成員 可以有虛方法

  • 抽象類不能實例化,抽象類定義了之后,一般不直接使用它,而是使用它的子類

  • 抽象類只有被繼承,才有存在的意義

  • 繼承抽象類的子類,必須實現抽象類中的抽象成員

5.4 密封類

(1)關鍵字 sealed,設計不讓其他類繼承,但可以繼承其他類,密封類中能包含 實例方法 靜態方法 不能包含抽象方法 虛方法 和密封方法

(2)特點

  • 不能被繼承

  • 可以實例化

  • 可以有實例成員,靜態成員,不能有抽象成員和虛成員

5.5 抽象方法,虛方法,密封方法

(1)抽象方法(abstruct):抽象方法 不能實現 必須等待子類繼承后, 在子類中重寫 override;先占個位置 不去實現 等待子類實現;"空殼"

(2)虛方法(virtual):和抽象方法類似 ;虛方法可以有方法體,而且在子類中 不強制重寫;虛方法就是為了重寫的 是虛擬的 先占位 業務邏輯也可以先寫一點,將來在子類中重新實現業務邏輯;繼承過來的虛方法 可以重寫 也可以不重寫

(3)密封方法(sealed override):sealed 修飾成密封方法,不想在后續的子類中重寫;sealed 關鍵字應用在方法上的時候,必須和override 同時使用

必須是繼承自父類的方法使用sealed override重寫,并不希望后面的子類重寫該方法

public sealed ?override void SealedFn1(){base.SealedFn1();}
5.6 總結表格
特點\類型普通類靜態類抽象類密封類
是否可以實例化
是否可以被繼承
是否可以繼承其他類
是否有普通成員
是否可以有靜態成員
是否可以有抽象成員
是否可以有虛成員

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

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

相關文章

中國星網發展情況全面分析

中國星網作為我國衛星互聯網領域的"國家隊"先鋒,自2021年4月成立以來已取得顯著進展。截至2025年8月,中國星網主導的GW星座已累計發射73顆衛星,形成"四天兩發"的高頻發射節奏,標志著我國低軌衛星互聯網建設進入加速期。在戰略定位上,中國星網不僅承擔…

C++ Qt 成員對象初始化與 TCP 長連接問題深度解析

文章目錄C Qt 成員對象初始化與 TCP 長連接問題深度解析1. 棧對象、堆對象與類成員對象的區別1.1 棧對象(局部變量)1.2 堆對象(動態分配)1.3 類成員對象1.4 棧對象 vs 成員對象 vs 堆對象對比表2. 為什么初始化列表必須用2.1 構造…

深度學習周報(8.11~8.17)

目錄 摘要 Abstract 1 CNN--卷積神經網絡簡介 2 CNN核心操作 2.1 卷積 2.2 池化 3 總結 摘要 本周主要學習了卷積神經網絡(CNN)的相關知識,包括概念、基本架構與應用領域等知識,了解了CNN利用其結構高效地從圖像等網格化數…

oracle dg duplicate限速

一些客戶在搭建dg的時候需要進行限速&#xff0c;不然對生產庫的影響比較大&#xff0c;例如將速度限制到200M每秒&#xff0c;語法如下&#xff1a;rman target sys/XXXX auxiliary sys/XXXXdg <<EOF run{ allocate channel d1 type disk rate 200M; allocate auxiliar…

飛算JavaAI智慧校園場景實踐:從校園管理到師生服務的全鏈路技術革新

目錄一、智慧校園核心場景的技術突破1.1 智能校園綜合管理系統1.2 智慧教學資源共享系統1.3 校園生活服務集成系統二、智慧校園系統效能升級實踐結語&#xff1a;重新定義智慧校園技術邊界在校園管理領域&#xff0c;“規模化運營”與“個性化服務”的矛盾、“管理效率”與“服…

PTPX分析中,如何處理fsdb文件過大的問題?

PTPX分析中&#xff0c;如何處理fsdb文件過大的問題&#xff1f;摘要&#xff1a;下面將基于Synopsys工具鏈&#xff08;PrimeTime PX&#xff0c;即PTPX&#xff0c;用于功耗分析&#xff1b;Verdi&#xff0c;用于波形查看&#xff09;逐一解答每個部分。這些工具在SoC功耗驗…

004.Redis 數據持久化概述及實戰

文章目錄Redis持久化說明Redis持久化RDB持久化AOF持久化混合持久化save與bgsaveRedis RDB持久化Redis 安裝Redis RDB配置手動觸發RDB持久化模擬寫入測試數據模擬進程異常RDB的優缺點優勢劣勢Redis AOF持久化Redis 安裝Redis AOF配置AOF持久化模擬寫入測試數據模擬進程異常AOF的…

Kubernetes(K8s)常用命令全解析:從基礎到進階

Kubernetes&#xff08;K8s&#xff09;常用命令全解析&#xff1a;從基礎到進階 引言&#xff1a;為什么掌握K8s命令是云原生時代的必備技能&#xff1f; Kubernetes&#xff08;簡稱K8s&#xff09;作為容器編排的事實標準&#xff0c;已成為云原生應用部署、擴展和管理的核…

深入解析StatefulSet與K8s服務管理

目錄 一、Statefulset控制器&#xff1a;概念、原理解讀 有狀態服務 無狀態服務 StatefulSet部分組成 Headless service 二、Statefulset資源清單文件編寫技巧 三、Statefulset使用案例&#xff1a;部署web站點 四、Statefulset管理pod&#xff1a;擴容、縮容、更新 St…

GaussDB常用術語縮寫及釋義

序號 術語全稱釋義1ACLAccess Control List訪問控制列表&#xff0c;被授權訪問某一資源的實體及其訪問權限的列表。2APIApplication Programming Interface應用程序接口&#xff0c;一些預先定義的接口&#xff08;如函數&#xff0c;http接口&#xff09;或指軟件系統不同組…

工業一體機5G通訊IC/ID刷卡讓MES系統管理更智能

在智能制造升級過程中&#xff0c;MES 系統作為生產執行的核心樞紐&#xff0c;其數據采集的實時性、準確性與管理安全性直接決定管理效能。傳統 MES 系統常面臨數據傳輸滯后、設備對接繁瑣、權限管理粗放等問題&#xff0c;而工業一體機憑借 5G 通訊與 IC/ID 刷卡功能&#xf…

電腦開機幾秒后就停止然后再循環是怎么回事

硬件問題電源問題&#xff1a;電源內部的濾波電容若出現鼓包或漏液現象&#xff0c;會導致電源供電不足&#xff0c;從而使電腦開機后自動停止并重新啟動。另外&#xff0c;電源線連接不良、插座無電或電源供應器故障&#xff0c;也可能引發此問題。CPU 散熱問題&#xff1a;如…

OSCP - Proving Grounds - Vanity

主要知識點Linux命令注入rsync 腳本劫持(以前tar 備份腳本劫持也是利用了類似的方法&#xff09;具體步驟nmap掃描結果&#xff0c;發現web服務開放&#xff0c;并且 rsync服務開放&#xff0c;值得研究一下Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-30 14:37 UT…

詳細探討AI在金融、醫療、教育和制造業四大領域的具體落地案例,并通過代碼、流程圖、Prompt示例和圖表等方式展示這些應用的實際效果。

1. 引言&#xff1a;AI技術概述及其在各行業的重要性人工智能(AI)技術近年來取得了突破性進展&#xff0c;從理論研究走向了廣泛的商業應用。AI的核心技術包括機器學習、深度學習、自然語言處理、計算機視覺等&#xff0c;這些技術正在深刻改變各行各業的運營模式和服務方式。在…

我的第一個開源項目:從0到1,我在GitHub寫下的成長印記

文章目錄每日一句正能量前言? 一、寫在前面&#xff1a;那天我點下了 “Create Repository”&#x1f680; 二、為什么我要做這件事&#xff1f;&#x1f6e0;? 三、CommonUtilLibrary 是什么&#xff1f;? 四、第一次 Star 和第一次 Issue&#x1f9ed; 五、我從中學到了什…

數據結構(03)——線性表(順序存儲和鏈式存儲)

Hi&#xff01;探索者們&#x1f609;&#xff0c;歡迎踏入 408 數據結構的奇妙秘境&#x1f33f;&#xff01;? 我是 ankleless&#x1f4da;&#xff0c;和你并肩的尋寶人&#xff5e; 這是我的探險手札&#x1f5fa;?&#xff0c;里面記著鏈表森林的岔路陷阱&#x1f578;…

bun + vite7 的結合,孕育的 Robot Admin 【靚仔出道】(十三)

主題定制 &#x1f4d6; 閱讀時間&#xff1a;7 分鐘 | &#x1f3af; 等級&#xff1a;進階 前言 Robot_Admin應用程序具有靈活的主題系統&#xff0c;支持淺色、深色和基于系統的模式&#xff0c;以及程序化的主題定制。本指南介紹了如何在開發工作中使用和擴展主題功能。 …

檢測pytorch是否安裝好

如果pytorch安裝成功即可導入。import torch查看cuda是否可用&#xff0c;可用的話返回“ture”。print(torch.cuda.is_available())查看可用的cuda數量。print(torch.cuda.device_count())查看cuda的版本號。print(torch.version.cuda)

java八股文-(spring cloud)微服務篇-參考回答

一. 面試官&#xff1a;Spring Cloud 5大組件有哪些&#xff1f;Spring Cloud 的五大核心組件包括&#xff1a;注冊中心&#xff1a;第一代使用 Eureka&#xff0c;第二代使用 Nacos。負載均衡&#xff1a;第一代使用 Ribbon&#xff0c;第二代使用 Spring Cloud LoadBalancer。…

發布npmjs組件庫

一.初始化項目1.用Vite創建空項目2.安裝打包與聲明文件插件pnpm i -D vite-plugin-dts sass二.首先修改項目內容// src\index.ts import { type App } from vue; import oneComponent from "./components/oneComponent/index.vue"; import twoComponent from ".…