位置:首頁 > 高級語言 > C#教學 > C#封裝

C#封裝

封裝被定義“作為在一個物理或邏輯封裝包封一個或多個項目的過程”。封裝,麵向對象的編程方法,阻止訪問的實現細節。

抽象和封裝是麵向對象編程相關的特性。抽象允許製作相關的信息可見和封裝使程序員來實現抽象所需的水平。

封裝是通過使用訪問修飾符來實現。訪問符定義一個類成員的範圍和可視度。 C#支持以下訪問修辭符:

  • Public

  • Private

  • Protected

  • Internal

  • Protected internal

公共(Public)訪問說明符

公共訪問說明允許一個類的成員變量和成員函數暴露在其他功能和對象。任何公共成員可以從類的外部訪問。

下麵的例子說明了這一點:

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        //member variables
        public double length;
        public double width;

        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }//end class Rectangle    
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
			r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Length: 4.5
Width: 3.5
Area: 15.75

在上麵的例子中,成員變量的length和width 都聲明為public,這樣它們就可以使用Rectangle類,命名實例r通過函數main()進行訪問。

成員函數Display() 和的getArea()也可以直接訪問這些變量不使用類的任何實例。

成員函數Display()也被聲明為public,所以從Main()使用Rectangle類,命名為r的一個實例它也可以被訪問。

Private訪問修辭符

private訪問符允許類從其他職能和對象隱藏其成員變量和成員函數。隻有同一個類的函數可以訪問它的私有成員。即使是一個類的實例不能訪問它的私有成員。

下麵的例子說明了這一點:

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        //member variables
        private double length;
        private double width;

        public void Acceptdetails()
        {
            Console.WriteLine("Enter Length: ");
            length = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Enter Width: ");
            width = Convert.ToDouble(Console.ReadLine());
        }
        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }//end class Rectangle    
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52 

在上麵的例子中,成員變量的length和width都聲明為private,所以他們不能從main()函數訪問。成員函數AcceptDetails()和Display()可以訪問這些變量。由於成員函數AcceptDetails()和Display()被聲明public,它們可以從Main()函數中使用Rectangle類,命名為r的一個實例訪問。

Protected訪問修辭符

Protected訪問說明符允許子類來訪問其基類的成員變量和成員函數。這種方式有助於實現繼承。我們將在繼承這一章節詳細討論這個問題。

內部訪問說明符

內部訪問符允許類的成員變量和成員函數暴露在其他功能和對象在當前彙編。換句話說,使用內部訪問說明任何成員都可以從在其中構件被定義在應用程序中定義的任何類或方法來訪問。

下麵的程序說明了這一點:

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        //member variables
        internal double length;
        internal double width;
        
        double GetArea()
        {
            return length * width;
        }
       public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }//end class Rectangle    
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Length: 4.5
Width: 3.5
Area: 15.75

在上麵的例子中,注意到成員函數的getArea()不與任何訪問說明符聲明。那麼這將是一個類成員的默認訪問說明,如果我們不提任何?這是私有的(private)。

受保護的內部訪問說明符

受保護的內部訪問符允許一個類從其他類對象和函數隱藏其成員變量和成員函數,除了相同的應用程序中的子類。這是在實現繼承也有使用。