您現在的位置是:首頁 > 遊戲
在.NET中,C#舉例深度理解面向物件程式設計中的封裝、繼承和多型
說明類的繼承和多型有什麼作用
C#核心開發-第15單元-介面和繼承-第6節:面向物件程式設計
C#核心開發-面向物件程式設計
1。 什麼是面向物件程式設計?
我們在沒有接觸類之前,所有的程式碼都是堆在一起的,沒有面向物件的概念,但接觸了類/物件/繼承/介面之後,我們要建立自己的面向物件程式設計的概念,在編碼過程中,要讓自己編寫的程式是面向物件的,而不是堆程式碼。
微軟在。NET框架中推出的C#語言是面向物件的強型別程式語言。
那什麼樣的C#程式設計才是面向物件的程式設計呢?
面向物件程式設計是將我們實際生活中的物件經過抽象,將它定義成為一個類,透過類的屬性和方法來模擬生活中的這個物件。這樣使得程式更容易結構化、抽象起來更方便,這是一種程式設計思想。
面向物件的程式設計和3大特徵是:封裝、繼承、多型。也就是說只要我們編寫的程式當中使用了這3個特徵,那就是面向物件的程式設計。
2。 什麼是封裝?
封裝:就是把你需要的功能放在一個物件裡。如我們學習過的方法,就是一個非常好的封裝程式碼的一種方式。
例如,搬家,就需要將物品歸類並打包在一起,再貼上標籤,這樣運輸和管理起來都比較方便,當搬到新家後,根據標籤查詢物品,收拾起來也不會亂。
編寫程式也是一樣的,需要提前做好規劃,將類似功能歸到一個類中,且對相同特徵的可以抽出來,放在基類或介面中,將程式碼有序的管理好,日後有修改也不會導致程式無法執行。
例如:我們計算2個運算元的四則運算,此時我們就可以單獨建立一個類,將所有與數字相關的計算全部放在此類中,使用時就例項化該類,從物件中呼叫方法即可,這樣就做到與數字相關的操作封裝到一個類中。
下面是使用C#語言建立一個名稱為NumberOperation的類,用於數字相關的操作,且實現四則運算:
using System;
using System。Collections。Generic;
using System。Linq;
using System。Text;
using System。Threading。Tasks;
namespace Yidosoft。Edu。Csharp。Inherit
{
///
/// 數字相關操作。
///
public class NumberOperation
{
///
/// 加法運算。
///
///
///
///
public double Add(double d1,double d2)
{
return d1 + d2;
}
///
/// 減法運算。
///
///
///
///
public double Subtraction(double d1,double d2)
{
return d1 - d2;
}
///
/// 乘法運算。
///
///
///
///
public double Multiplication(double d1,double d2)
{
return d1 * d2;
}
///
/// 除法運算。
///
///
///
///
public double Division(double d1,double d2)
{
return d1 / d2;
}
}
}
上面這段程式碼是對與數字相關的操作進行封裝,封裝到了NumberOperation中,當我們在程式中需要與數字相關的操作,我們就例項化NumberOperation,使用其中的方法即可。
開發人員編寫程式碼也是封裝程式碼的過程,對程式碼有一個有序的管理。
當我們在主程式或專案的任何地方,需要計算兩個運算元的加法運算時,我們只需要呼叫方法即可:
C#封裝程式碼-圖1
圖1是在另外一個Program類中例項化了NumberOperation類,並呼叫了其中的Add()方法用於計算加法操作,至於加法是如何計算的,在使用時無需關心,只使用即可,這就是封裝的作用和意義,使用時隱藏掉了具體的一大堆的計算程式碼,使主程式更加清晰,明瞭。
3。 什麼是繼承?
繼承也是面向物件程式設計的一個重大特徵,是為了解決程式碼複用的問題而出現的,可以減少類與類之間的程式碼冗餘的問題。
除了類之間的繼承之外,還有介面與類之間的繼承,使用介面繼承讓程式碼更具有規範性,使程式更加嚴謹。
使用繼承的好處是可以將多個子類公有的屬性提出來,放在基類中,而子類只需要編寫自己獨有的屬性即可,這樣在子類中就不需要編寫公有的屬性了,減少了程式碼量,達到程式碼的複用。
如下是使用C#語言建立的基類:Base
C#基類-圖2
圖2是一個C#基類,抽出來3個公有屬性。
子類:Lawyer
子類繼承基類-圖3
子類:Accounting
Accounting子類繼承基類-圖4
Lawyer和Accounting子類都繼承了Base基類,但這2個子類中都有自己的一個屬性,現在例項化一下:
呼叫子成員-圖5
呼叫子類屬性-圖6
從對這2個子類例項化的物件中,我們看到了4個屬性,其中有3個是基類的公共屬性,它們也可以使用,另外1個是自己獨有的屬性。
4。 什麼是多型
多型的定義:同名方法表現出的不同操作和功能。
在C#中,同名方法表現出不同的操作有過載和重寫:
(1)。 過載:表現的是方法的引數型別或引數個數不同。
(2)。 重寫:表現的是可以覆蓋掉基類同名方法的邏輯程式碼。
在多型中,重寫屬於執行期的多型,過載屬於編譯期的多型。
下面我們建立一個名稱為Animal的基類,並編寫如下C#程式碼:
using System;
using System。Collections。Generic;
using System。Linq;
using System。Text;
using System。Threading。Tasks;
namespace Yidosoft。Edu。Csharp。Inherit
{
///
/// 基類:動物類。
///
public class Animal
{
public virtual string Show(string id)
{
string result = “”;
if (id != null)
{
result = DateTime。Now。ToLongDateString();
}
return result;
}
public void Add(string id)
{
Console。WriteLine($“已新增Id:{id}”);
}
public void Add(string id,string name)
{
Console。WriteLine($“已新增Id:{id},name:{name}”);
}
}
}
此段程式碼說明如下:
(1)。 Animal作為基類出現。
(2)。 Show()方法使用了virtual修飾,表示這是一個虛方法,可以在子類中重寫。
(3)。 Add()方法有2個過載,只是引數不同而已。
在Animal基類中,過載的方法已經有了,現在建立一個Dog子類,繼承Animal基類:
C#過載方法-圖7
在圖7的Dog子類中,重寫了基類中的同名Show()方法,更改了其中的邏輯程式碼。
現在我們在Program類中使用一下Dog子類,也看一下多型的呈現:
呼叫過載方法-圖8
在圖8中,就是對C#重寫和過載的用法,在子類例項中呼叫重寫的方法,執行的是重寫的邏輯程式碼,而過載表現的是由於引數的不同,計算結果也不同。
以上透過C#語言舉例詳細對面向物件程式設計的封裝、繼承和多型進行了講解,希望能從中得到一些經驗,在將來的程式設計過程中,都能以面向物件程式設計的思想去規劃程式碼,編寫出強健的程式。
C#深入程式設計-線上影片圖文課堂 配套課後技能作業+理論考試+原始碼
¥
158
淘寶
購買
推薦文章
- 新區開啟丨《復古合擊》酷炫神將、獨門武學大放送!
獲得武學秘籍後,勇士可消耗武學殘頁在【晉升】介面升級武學秘籍,進一步強化武學效果,武學殘頁可透過怪物掉落、神秘礦洞、神將派遣等玩法獲得...
- 人在天涯不忘回鄉祭祖:祭祖的習俗和禁忌
祭祖的禁忌只要你有一顆虔誠的心,個人覺得:百無禁忌民間有一四七日(即初一、初四、初七、十一、十四、十七、廿一、廿四、廿七日)不祭祖的習俗,於是便有人在這日去剷除墳墓內外的雜草,修通排水溝渠,給墳珠添土,次日祭拜時只須給墳珠頂上加一塊草坯壓上...
- 中醫治療精神分裂症(癲證)經方1則,益腎平肝
後世醫家對癲狂理論和治療有了進一步的發展,如《醫學正傳》認為狂為痰火實盛,癲為心血不足,狂宜下,癲宜安神養血,兼降痰火證治要決指出癲狂當治痰寧志張景嶽等醫家主張治癲宜解鬱化痰,寧心安神為主...