封裝:
被定義為"把一個或多重專案封閉在一個物理的或者邏輯的包中"。在物件導向程式設計方法論中,封裝是為了防止對實現細節的訪問。也就是把裡面實現的細節包起來,這樣很複雜的邏輯經過封裝之後給別人使用就很方便,別人不需要瞭解裡面是如何?的,只要傳入所需要的參數就可以得到想要的結果。封裝使用存取修飾詞 來實現。一個存取修飾詞 定義了一個類成員的範圍和可見度。
存取修飾詞:
在 類class的聲明與定義 中我簡略的介紹了存取修飾詞,不是很具體,這裡我們深入學習存取修飾詞;
在C#中存取修飾詞有5個public、private、protected、internal、protected internal;
public修飾符
public 存取修飾詞允許一個類將其成員變數和成員函數暴露給其他的函數和對象。任何公有成員可以被外部的類訪問。(不限制對成員的訪問,子類可以,對象也可以)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class student { public int Chinese=80; public int Math=67; public int English=45; //定義一個方法 public int total() { int sum = 0; sum = Chinese + Math + English; return sum; } } class teacher { static void Main(string[] args) { student stu = new student(); //執行個體化一個對象 Console.WriteLine("Chinese = {0}\nMath = {1}\nEnglish = {2}\nTotal = {3}",stu.Chinese,stu.Math,stu.English,stu.total()); } } }
輸出結果:
在上面的例子中student中的所有成員都是public類型訪問,所以他的執行個體化對象 stu 能夠訪問所有成員。
private修飾符
Private 存取修飾詞允許一個類將其成員變數和成員方法對他的對象進行隱藏。只有同一個類中的方法可以訪問它的私人成員。即使是類的執行個體也不能訪問它的私人成員 (不允許他的子類或對象訪問)。
我們將上面的例子利用下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class student { private int Chinese=80; private int Math=67; public int English=45; private int total() { int sum = 0; sum = Chinese + Math + English; return sum; } } class teacher { static void Main(string[] args) { student stu = new student(); int Chinese = stu.Chinese; //出錯了,不可訪問(private) int English = stu.English; //可以訪問 (public) int total = stu.total(); // 不可訪問 private 方法 } } }
由於在student類中對變數 Chinese、Math 方法 Total 有private 訪問限制,所以無法通過對象stu 訪問
protected修飾符
Protected 存取修飾詞允許子類訪問它的基類的成員變數和成員函數。這樣有助於實現繼承。(不允許對象訪問,允許類中的方法訪問,允許子類訪問)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class student { //定義protected 類型保護 protected int Chinese=80; protected int Math=67; protected int English=45; protected int total() { int sum = 0; sum = Chinese + Math + English; return sum; } } class teacher:student //teacher 繼承student類 { static void Main(string[] args) { teacher teac = new teacher(); //建立子類 teacher 對象 //全部成功訪問 int Chinese = teac.Chinese; int English = teac.English; int total = teac.total(); } } }
internal修飾符
Internal 存取修飾詞允許一個類將其成員變數和成員方法暴露給當前程式集中(當前項目)的其他方法和對象。換句話說,帶有 internal 存取修飾詞的任何成員可以被定義在該成員所定義的程式集(項目)內的任何類或方法訪問。
要學習internal修飾符,我們就得先學習使用Vs2010建立多個工程以及工程與工程的引用方法:
先建立一個工程檔案:命名為 Test_internal
點擊確定後,找到解決方案管理器:
右鍵 解決方案“Test_internal”(1個項目) --->添加--->建立項目---->visual C#--->控制台; 在名稱欄中我們命名為Class_internal 確定;這樣我們就建立了2 個項目(程式集)
其實我們上面輸入的名稱就是我們定義的命名空間的名稱,開啟代碼Class_internal的命名空間是 namespace Class_internal, Test_internal 的命名空間是namespace Test_internal,我們在一個工程裡通過using 命名空間來引用另一個工程的內容,不過在此之前我們還得 在 “引用” 列表中添加被引用的工程路徑:
右鍵 “引用”--->添加引用--->項目。 在項目名稱列表中找到要引用的項目名稱這裡我們選 Class_internal 單擊確定,引用列表中就會多出 Class_internal 引用成功
我們開啟Class_internal中的program.cs編輯以下代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Class_internal { public class student { //定義2個 internal 訪問類型與一個public訪問類型 internal int Chinese=80; internal int Math=70; public int English=56; //定義一個internal 訪問類型方法 internal int Total() { int sum = 0; sum = Chinese + Math + English; return sum; } static void Main(string[] args) { } } }
然後在Test_internal中編輯以下代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Class_internal; //引用命名空間 namespace Test_internal { class Program { static void Main(string[] args) { student stu = new student(); //執行個體化一個student類型 int Chinese = stu.Chinese; //出錯了,internal 保護類型無法在這個項目中訪問 int Math = stu.Math; //出錯,同上 int English = stu.English; // 成功訪問public保護類型 } } }
我們在Class_internal中使用internal與public訪問類型,在另一個項目Test_internal中只能訪問到public訪問類型。這就是internal
protected internal修飾符
Protected Internal 存取修飾詞允許一個類將其成員變數和成員函數對同一應用程式內(項目)的子類以外的其他的類對象和函數進行隱藏。(不太明白) 換句話說就是同時擁有protected 與 internal的性質,protected訪問限制在子類,能夠在另一個程式集(項目)中通過繼承方式訪問到,internal是限制其他項目的訪問,兩個限制疊加,protected類型在另一個項目中不能通過繼承的子類訪問到。
以上就是C#學習日記21----封裝 與 存取修飾詞的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!