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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...