香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(39)面向對象三大特性之封裝

C#Lonely2019-05-16 14:34:4743次0條

在面向對象出現之前,結構化程序設計是程序設計的主流,被稱為”面向過程“的程序設計。面向過程:香蕉视频app面向的是完成事情的過程,強調的是完成事情的動作。面向過程的開發方法,通常會存在以下問題:1、軟件復用性差。2、軟件可維護性差。3、軟件靈活性差。

面向對象:香蕉视频app找個對象來幫你完成這件事,意在寫出通用的代碼,屏蔽差異。面向對象的優點:1、高效(根據現實生活的事物設計)2、安全(封裝)3、易修改(繼承、多態)

C#是一門面向對象的語言,所有的面向對象語言都具有三個基本的特征那就是封裝、繼承和多態。

封裝:香蕉视频app把客觀事物封裝成類,并將類內部的實現隱藏,以保證數據的完整性。

繼承:通過繼承可以復用父類的代碼。

多態:香蕉视频app允許將子對象復制給父類的一種能力。


封裝

封裝 (encapsulation):隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀取和修改的訪問級別。

封裝途徑:香蕉视频app封裝就是將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。

封裝的目的:增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,以特定的訪問權限來使用類的成員。

簡單的來說封裝指的是把類內部的數據隱藏起來,不讓對象實例直接對其操作。c#中提供了屬性機制來對類內部的狀態進行操作。在c#中,封裝可以通過Public、Private、Protected和Internal等關鍵字來體現。

為什么要將類內部的數據封裝起來?下面通過一個簡單的例子來解釋其必要性,具體代碼如下:

//不使用封裝特性來定義一個Person類
public class Person
{
    public string _name;
    public int _age;
}

當把字段定義為公共類型時,外部對象可以對類內部的數據進行任意的操作,很可能導致當前值不符合系統的業務邏輯。下面代碼演示了公共數據存在的問題。

static void Main(string[] args)
{
    Person p = new Person();
    p._name = "張莉麗"; 
    p._age = -5; //-5賦值給age字段顯然是不符合業務邏輯的,人的年齡不可能為負。
}

如上代碼中,盡管把-5賦給Person的_age屬性沒有引起編譯錯誤,但這并不符合業務邏輯,因為在現實生活中,人的年齡不可能為負值。當我們把類的字段定義為公共類型時,外部對象可以直接對類內部的數據進行操作,此時無法對這些操作進行一些邏輯判斷,這就是公共數據的問題所在。

面向對象編程中的封裝特性,是一種保護狀態數據完整性的方法,在面向對象編程中,應更多地定義私有數據字段。c#提供屬性機制來對這種私有字段數據進行間接的操作,并且可以在屬性的定義中加入更多的邏輯判斷。利用封裝技術,我們可以有效地對外部隱藏類內部的數據,從而避免數據損壞。

香蕉视频app下面的代碼演示了在C#中,使用封裝技術后類的定義過程。

public class Person
{
    private  string _name;
    private  int _age;
    
    public string Name
    {
        get { return _name; }
        set {_name = value ; }
    }
    
    public int Age
    {
        get { return _age; }
        set
        {
            //在屬性定義中,可以根據系統的業務邏輯添加邏輯代碼
            if(value < 0 || value >120)
            {
                throw (new ArgumentOutOfRangeException("AgeIntPropery", value, "年齡必須在0-120之間"));
                _age = value;
            }
        }
    }
}

使用了封裝技術之后,外部數據只能對屬性進行操作。如果把不符合邏輯的值賦給屬性Age,就會在運行時拋出異常,客戶端調用可以通過捕獲該異常,進行相關的錯誤處理操作。





暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!