C# - 封裝



封裝 定義為“將一個或多個專案封裝在物理或邏輯包中的過程”。在面向物件程式設計方法中,封裝防止訪問實現細節。

抽象和封裝是面向物件程式設計中的相關特性。抽象允許顯示相關資訊,而封裝使程式設計師能夠實現所需的抽象級別

封裝是透過使用訪問修飾符來實現的。訪問修飾符定義了類成員的作用域和可見性。C# 支援以下訪問修飾符:

  • 公共 (Public)
  • 私有 (Private)
  • 受保護 (Protected)
  • 內部 (Internal)
  • 受保護的內部 (Protected internal)

公共訪問修飾符

公共訪問修飾符允許類將其成員變數和成員函式公開給其他函式和物件。任何公共成員都可以從類外部訪問。

以下示例說明了這一點:

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,因此可以使用名為r的 Rectangle 類例項從 Main() 函式訪問它們。

成員函式Display()GetArea() 也可以直接訪問這些變數,無需使用類的任何例項。

成員函式Display() 也被宣告為public,因此也可以使用名為r的 Rectangle 類例項從Main()訪問它。

私有訪問修飾符

私有訪問修飾符允許類將其成員變數和成員函式隱藏於其他函式和物件。只有同一個類的函式才能訪問其私有成員。即使是類的例項也不能訪問其私有成員。

以下示例說明了這一點:

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,因此可以使用名為r的 Rectangle 類例項從Main()訪問它們。

受保護訪問修飾符

受保護訪問修飾符允許子類訪問其基類的成員變數和成員函式。這樣有助於實現繼承。我們將在繼承章節中更詳細地討論這一點。

內部訪問修飾符

內部訪問修飾符允許類將其成員變數和成員函式公開給當前程式集中的其他函式和物件。換句話說,任何具有內部訪問修飾符的成員都可以從定義該成員的應用程式中定義的任何類或方法訪問。

以下程式說明了這一點:

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

受保護的內部訪問修飾符

受保護的內部訪問修飾符允許類將其成員變數和成員函式隱藏於其他類物件和函式,但同一個應用程式中的子類除外。這也在實現繼承時使用。

廣告