C# OO(初級思想)。

来源:https://www.cnblogs.com/shigezhuang/archive/2018/01/02/8177436.html
-Advertisement-
Play Games

繼承,多態,封裝 在C#中,為了能夠合理描述自然界的規律,面向對象的編程引入了繼承的概念,是面向對象編程中最重要的概念之一,定義瞭如何根據現有的類創建新類的過程. 繼承:一個類派生出來的子類具有這個類所有的公共屬性和方法。 父類派生子類,子類繼承父類。 語法-- 子類:父類 子類和父類 被繼承的類稱 ...


繼承,多態,封裝

在C#中,為了能夠合理描述自然界的規律,面向對象的編程引入了繼承的概念,是面向對象編程中最重要的概念之一,定義瞭如何根據現有的類創建新類的過程.

繼承:一個類派生出來的子類具有這個類所有的公共屬性和方法。

父類派生子類,子類繼承父類。

語法-- 子類父類

子類和父類

被繼承的類稱為父類或基類,繼承其他類的類稱為子類或派生類,子類不僅具有自己的獨有的成員,還有父類的成員。

Is a 的應用

在兩個類中建立繼承關係必須符合is a 的關係(例:小型卡車 is a 卡車,卡車is a 汽車,小型卡車is a汽車)

里氏替換原則:子類可以替換父類,但父類不可以替換子類對象。

只有當子類可以替換父類時,軟體功能不受影響,父類才能真正被覆用,而子類也能夠在父類的基礎上增加新的行為。

Is as操作符的使用

Is 操作符用於檢查對象和制定的類型是否相容。

As 操作符主要用於兩個對象之間的類型轉換

繼承的特性

繼承有傳遞性(子類能派生子類)和單根性(一個子類不能同時繼承多個父類)

Base關鍵字和protected修飾符

base:表示父類,用於調用父類里的成員。

Protected:修飾父類成員,只允許子類調用和類的本身內部訪問,不允許其他非子類訪問。

修飾符的區別:

Public:任何類都可以訪問。

Private:任何類都不可以訪問。

Protected:只能由類的本身該類的子類內部訪問,其他任何類不可以訪問

子類構造函數:

任何子類都繼承父類的公共無參構造函數,父類的其他構造函數不會被繼承,只能在子類中聲明相同簽名的構造函數並用base顯示調用。

子類的構造函數肯定會調用父類的構造函數,先執行父類中的構造函數在執行子類中的構造函數。

隱式調用父類中的構造函數:

子類(沒有指明的情況下)調用父類中系統預設的一個無參構造函數。

顯示掉用父類中的構造函數

在子類指明的情況下用base關鍵字調用父類的某一個構造函數,實現屬性的初始化,然後在子類本身的構造函數中完成對子類特有的屬性初始化。如果子類沒有指明調用父類里手動創建的哪個構造函數時系統就會調用父類中手動創建的無參的構造函數,若是沒有系統將會報錯。

Public SE(string  name);  =  Public SE(string  name):base();

註:用base調用父類構造函數時,只能傳遞參數。                                                                                                     

多態

多態:兩個或多個屬於不同類的對象,對於同一個消息(方法調用)作出不同響應的方式。

多態是建立在繼承的基礎上的,沒有繼承就沒有多態。

實現多態

以父類類型作為參數:可以接受他的子類類型,程式在運行中自動判斷實際參數屬於哪種子類,調用子類的方法從而實現多態。

我們通過虛方法和抽象方法在繼承的基礎上實現多態(通過重寫父類的方法,完成自己的方法)。

虛方法:實現方法重寫。通過關鍵字Virtual來定義一個虛方法(父類中),用Override修飾來重寫這個虛方法(子類中)。

語法:訪問修飾符 virtual 返回值類型 方法名()

{

//方法體

}

 

用虛方法 實現多態:

1.子類重寫父類的虛方法

兩種方式:1.創建父類變數用子類對象實例化這個父類變數

          2.把父類類型作為參數,它的子類對象作為參數傳入

2.運行時,根據實際創建的對象決定執行哪個方法

抽象方法: 是一個沒有實現的方法,這些方法只能定義,通過在定義方法時加上關鍵字abstract可以聲明一個抽象方法(父類中),用Override來重寫這個抽象方法(重寫)。

語法:訪問修飾符 sbstract返回值類型 方法名();

註:抽象方法中沒有方法體。

抽象方法的應用:定義抽象方法必須在非抽象的子類中去實現,抽象方法必須定義在抽象類中。

 

抽象類:用sbstract修飾的類都是抽象類。抽象類是抽象的概念,抽象類提供抽象方法要求繼承他的子類去實現,通過這些抽象方法來約束子類的行為,有抽象的方法的類必然是抽象類,抽象類中不一定只能有抽象方法。

抽象類不能被實例化,也不能是密封和靜態的

 

抽象方法和虛方法都是通過override重寫父類的方法來實現多態。

註:重寫父類的語法:方法名、參數列表,返回值一樣

(方法重載是在一個類中完成,方法名相同,參數個數和參數類型不同,並且和返回值無關)

二者之間的區別:

抽象方法:

用abstract關鍵字修飾,

沒有方法體,

必須被override重寫,

只能在抽象類中寫。

 

虛方法:

用virtaul關鍵字修飾有方法體

可以被override重寫,

也可以不被override重寫

                 

面向對象思想

封裝:保證對象自身數據的完整性和安全性。

繼承:建立類之間的關係,實現代碼復用,方便系統擴展。

多態:相同的方法調用可實現不同的實現方式。

面向對象高級應用 

設計模擬式

在軟體工程中把對象的依賴性叫做耦合,而一個模塊內部各個元素彼此之間的聯繫叫做內聚。軟體工程中推崇“高內聚”,“低耦合”的設計。 

設計模式概念:某些特定問題經過實踐檢驗的特定的解決方法。

設計模式就像古代的《三十六計》一樣。設計模式就是人們在軟體

開發中對一些經驗的總結。

面向對象設計模式是可復用面向對象軟體的基礎  

簡單工廠設計模式:創建簡單工廠就是吧變化點封裝起來,在類的內部對代碼執行增加修改通過定義一個父類類型的方法返回父類類型子類對象,這個方法體內實例的子類根據方法傳的參數來進行創建。

簡單工廠設計模式降低了類與類之間的耦合性極大地減少了客戶程式的修改,使程式擴展性能大大增強(使客戶程式基本不需改動),但簡單工廠也有一定的局限性。

單例設計模式:將產生實例的方法在類部,通過一個靜態方法返回它的實例。(在類中把構造函數設為私有的)

私有構造函數:一種特殊的構造函數,通常只包含靜態成員的類中,如果一個類中只有私有的構造函數沒有公共得構造函數的話,則其他類將無法訪問該類的實例。

單例設計模式特點:

1.     私有構造函數。

2.     2.保存唯一的靜態的私有變數。

3.     獲取唯一實例的靜態方法。

應用單例設計模式:當類只能有一個實例存在,並且可以在全局訪問可以使用單例設計模式。

簡單工廠模式應用:簡單工廠模式試用於客戶程式不需要知道所創建的對象到底屬於哪個子類,所要創建的對象需要變化,因此把這些變化封裝到工廠之內。

軟體的設計以需求為基礎,所以要適當的情況下選用適當的設計模式。


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

-Advertisement-
Play Games
更多相關文章
  • 一 概述 在我們講解NuGet前,我們先來看看一個例子。 1.例子: 假設現在開發一套系統,其中前端框架我們選擇Bootstrap,由於選擇Bootstrap作為前端框架,因此,在項目中,我們需要引入Bootstrap相關文件,大致會執行如下操作。 步驟一:下載Bootstrap文件 輸入Boots ...
  • 示例代碼: 執行結果圖: ...
  • 最近因為業務需求開發了一個介面用於接收數據,但是總有一些數據報出ORA-01704:字元串文字太長錯誤。仔細排查後發現,竟然是NCLOB類型欄位提示這個錯誤。NCLOB存儲空間有4G,怎麼也想不明白為什麼會報這個錯誤。原來因為介面插入數據採用字元串拼接的方式。 而oracle中會把字元串轉為varc ...
  • 1.定義一個枚舉,樂器類型 #region 樂器定義 public enum MusicNo:uint { /// <summary> /// //大鋼琴 /// </summary> AcousticGrandPiano = 0, /// <summary> ///明亮的鋼琴 /// </summ ...
  • 一、新建項目 打開vs2017,新建一個項目,命名為orm1 二、新建資料庫 打開 SqlServer資料庫,新建資料庫 orm1,並新建表 student 。 三、新建 ADO.NET 實體數據模型 這裡點擊 新建連接,新建資料庫連接。其實伺服器名輸入 . 代表本地伺服器,身份驗證選擇預設的Win ...
  • 寫在前面 整個項目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 這一節內容可能會用到的庫文件有 Sort和 SortData,同樣在 Github 上可以找到。 善用 Ctrl + F 查找題目 ...
  • 一、前言 時間過得真是快,轉眼就2018年了。首先祝各位博友,軟體開發者新年新氣象,事業有成,身體健康,闔家幸福!最近看到園子里好多關於自己的2017年度總結以及對自己新一年的願景,覺得咱園子的氛圍是真的好。這三天假期我也沒閑著,一邊看OB海鮮團吃雞一邊寫Socket SocketAsyncEven ...
  • 並行演算法有可能非常複雜,並且或多或少涵蓋了這些並行集合。線程安全並不是沒有代價的。比起System.Collections和System.Collections.Generic命名空間中的經典列表 、集合和數組來說,併發集合會有更大的開銷,因此,應該只在需要從多個任務中併發訪問集合的時候才使用併發集... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...