C# 封裝的訪問修飾符
封裝 被定義為"把一個或多個項目封閉在一個物理的或者邏輯的包中"。在面向對象程序設計方法論中,封裝是為了防止對實現細節的訪問。
抽象和封裝是面向對象程序設計的相關特性。抽象允許相關信息可視化,封裝則使開發者實現所需級別的抽象。
C# 封裝根據具體的需要,設置使用者的訪問權限,並通過 訪問修飾符 來實現。
一個 訪問修飾符 定義了一個類成員的範圍和可見性。C# 支持的訪問修飾符如下所示:
- Public:所有對象都可以訪問;
- Private:對象本身在對象內部可以訪問;
- Protected:只有該類對象及其子類對象可以訪問
- Internal:同一個程序集的對象可以訪問;
- Protected internal:一個程序集內的對象,或者該類對象及其子類可以訪問
如果沒有指定訪問修飾符,則使用類成員的默認訪問修飾符,即為 private。
Public 訪問修飾符
Public 訪問修飾符允許一個類將其成員變量和成員函數暴露給其他的函數和對象。任何公有成員可以被外部的類訪問。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program1 { publicint a; public int b; public int AddData() { return a + b; } public void Display() { Console.WriteLine("a: {0}", a); Console.WriteLine("b: {0}", b); Console.WriteLine("和: {0}", AddData()); } }class Program2 { static void Main(string[] args) { Program1 a = new Program1(); a.a = 3; a.b = 5; a.Display(); Console.ReadLine(); } } }
當上面的代碼被編譯和執行時,它會產生下列結果:
a: 3 b: 5 和: 8
上面程序中,class program1 中變量和函數被聲明為 public, 因此可以被下面的program2中Main()函數 使用program1類的實例 a 訪問到。
Private 訪問修飾符
只有同一個類中的函數可以訪問它的私有成員,即使是類的實例也不能訪問它的私有成員。如果將上面程序類 program1中 a,b前的聲明改為 private ,在用類的實例對它們進行訪問時會出現下面提示:
在這種聲明下,在其他類中為了使用(操作)這些數值,可以在這些數值所在的類下編寫可以操作這些數值的函數,然後在其他類中訪問這些函數,程序如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program1 { private int a; private int b; public void Acceptdetails() { Console.WriteLine("請輸入a:"); a = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("請輸入b:"); b = Convert.ToInt16(Console.ReadLine()); } public int AddData() { return a + b; } public void Display() { Console.WriteLine("a: {0}", a); Console.WriteLine("b: {0}", b); Console.WriteLine("和: {0}", AddData()); } } class Program2 { static void Main(string[] args) { Program1 a = new Program1(); a.Acceptdetails(); a.Display(); Console.ReadLine(); } } }
運行結果如下:
請輸入a: 5 請輸入b: 4 a: 5 b: 4 和: 9
Protected 訪問修飾符
Protected 訪問修飾符允許子類訪問它的基類的成員變量和成員函數。這樣有助於實現繼承。
Internal 訪問修飾符
Internal 訪問說明符允許一個類將其成員變量和成員函數暴露給當前程序中的其他函數和對象。換句話說,帶有 internal 訪問修飾符的任何成員可以被定義在該成員所定義的應用程序內的任何類或方法訪問。
Protected Internal 訪問修飾符
Protected Internal 訪問修飾符允許在本類,派生類或者包含該類的程序集中訪問。這也被用於實現繼承。
C# 封裝的訪問修飾符