封裝:
定義為"把一個或多個項目封閉在一個物理的或邏輯的包中"。在物件導向程式設計方法論中,封裝是為了防止對實作細節的存取。也就是把裡面實現的細節包起來,這樣很複雜的邏輯經過包裝之後給別人使用就很方便,別人不需要了解裡面是如何實現的,只要傳入所需的參數就可以得到想要的結果。封裝使用存取修飾符 來實現。一個存取修飾符 定義了一個類別成員的範圍和可見性。
存取修飾符:
在 類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 存取
🎠tectec告訴符允許子類別存取它的基底類別的成員變數和成員函數。這樣有助於實現繼承。 (不允許物件訪問,允許類別中的方法訪問,允許子類別訪問)
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 點選確定,引用清單就會多出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) { } } }
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保护类型 } } }
protected internal修飾符
為(不太明白) 換句話說就是同時擁有protected 與internal的性質,protected訪問限制在子類,能夠在另一個程序集(項目)中通過繼承方式訪問到,internal是限制其他項目的訪問,兩個限制疊加,protected類型在另一個專案中不能透過繼承的子類別存取。
以上就是C#學習日記21----封裝 與 存取修飾符的內容,更多相關內容請關注PHP中文網(www.php.cn)!