C#面向對象之封裝。


封裝是面向對象的基礎和重要思想之一,今天具體的了解封裝這一特性后發現其實自己已經接觸過很多關於封裝的內容了。

 一、什么是封裝。

封裝的概念:將具體的實現細節裝到一個容器中,封閉或隱藏起來(使用訪問修飾符private來實現),防止容器外部直接訪問內部的實現細節或更改內部成員,僅對外公開對應的接口來訪問。

 二、封裝的實例。

1.封裝字段。

  class Person
    {
        public int age;
    }

在person類中,如果要使用age字段,那么就必須設為public,但是這樣是不安全的,因為這樣外部可以任意訪問或修改它,並且會出現age=500,這樣的非法值。解決方案:用屬性來封裝字段。

 class Person
    {
        private int _age;
        public int age
        {
            get { return _age; }
            set
            {
                if (value > 10)
                {
                    throw new Exception("error");
                }
                else
                {
                    _age = value;
                }
            }
        }
    }

將_age設為private,然后向外開放一個age的接口來設置它,這樣外部並不能訪問到_age,並且可以通過屬性限制字段的合法性。

這樣也可以看出字段與屬性的關系:屬性是字段的封裝。

2、一堆代碼封裝在一個方法里。

這個很簡單,就是寫一個方法,像tostring()一樣,是.net里封裝好了的方法,我們直接用就是,而並不關心具體的實現,如果名字取得的得當,還能清楚地知道這個方法的功能。

3、方法的多個參數封裝成了一個對象。

 class Program
    {
        static void Main(string[] args)
        {
            Record("小明", 18, 10086);
        }
        private static void Record(string name, int age,int phone)
        {
            Write(name, age,phone);
        }
        private static void Write(string name, int age,int phone)
        {
            
        }
    }

比如開學了,學校要用Record方法記錄同學的信息,但Record方法中又有一個Write方法要做其他事,這時候就要傳遞很多參數。解決方法:

 class Program
    {
        static void Main(string[] args)
        {
            Record(new Student() { name="小明",age=18,phone=10086});
        }
        private static void Record(Student student)
        {
            Write(student);
        }
        private static void Write(Student student)
        {
            
        }
    }
    class Student
    {
        public string name { get; set; }
        public int age { get; set; }
        public int phone { get; set; }
    }

定義一個Student類,參數傳遞只需要傳遞一個對象即可。

三、綜上,封裝的好處。

1、隔離性,安全性,被封裝后的對象(這里的對象是泛指代碼的編程單元,一般指:程序集,命名空間,類,方法,屬性,變量等)其外部對象是無法直接訪問對象的內部實現細節,內部實現細節的的改動不會影響到外部對象的訪問原則。

2、可讀性,被封裝的對象的名稱恰當的話,可以不看具體實現的情況下,了解該對象的作用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM