※以下內容皆是新手撰寫,內容可能不完全正確
不知道有沒有人看出標題裡面的是隻表情奇特的蜘蛛ヘ(= ̄∇ ̄)ノ
這過程中也讓自己在程式中看得懂的東西增加,之前不懂的,現在好像懂(?)吧
回到正經話題,今天的主題是 封裝(encapsulation) ,而封裝的定義是把「一個或多個物品裝在一個實體的或邏輯性質的包裝裡」(這不是我定義的)。C#程式語言中,封裝的意義是物件隱藏使用者不需要的資訊和行為,因此,封裝亦算是隱藏資訊;封裝使程式裡的性質(properties)、方法(methods)及其它成員能被使為一個單位或物件。
封裝這個動作得透過使用 存取規格符(access specifiers) 方可達成。存取規格符能控制類別成員的顯示範疇和可見性/能見度。封裝的好處很多:
C#的存取規格符有以下幾種:
public存取規格符(public access specifier) :
用之前講解別的東西的程式碼解釋,冠上public的類別讓自己之外的函數和物件用到類別中的成員,如cube中的numbers():
using System;
namespace CubeApplication
{
class Cube
{
int height;
int width;
int length;
public void numbers()
{
height = 5;
width = 5;
length = 5;
}
public int value()
{ return height * length * width; }
public void calc() {
Console.WriteLine("Height: {0}", height);
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Volume: {0}", value());
}
}
class calcube
{
static void Main(string[] args)
{
Cube c = new Cube();
c.numbers();
c.calc();
Console.ReadLine();
}
}
}
numbers()跟calc()calcube都能用到。
private存取規格符(private access specifier) :
private將一個類別中的函數和變數設限制,只有自己類別中的函數才能使用,可說是和public相反(?)。若在應寫上存取規格符的地方沒有寫,那麼系統會將其預設為private。
protected存取規格符(protected access specifier) :
使用此存取規格符讓子類別(child class)有權使用基礎類別(base class)中的成員變數及成員函數,在繼承的部分會再提到。
internal存取規格符(internal access specifier) :
internal存取規格符標示的成員變數和函數在同一個組合(assembly)內都能使用。
protected internal存取規格符(protected internal access specifier) :
使用此存取規格會對外部隱藏所有的成員變數和函數,只允許相同程式當中的子類別存取,這個存取規格符也會在繼承的部分提及。
寫這麼多了,覺得程式語言裡面好多東西環環相扣,有些部分漏掉什麼就沒有辦法徹底去了解它的全貌,像上面說的繼承(ˊˋ)只能說,繼續努力囉~~~
參考資料:
(a) Tutorialspoint; C# - Encapsulation
https://www.tutorialspoint.com/csharp/csharp_encapsulation.htm
(b) Techopedia; Encapsulation
https://www.techopedia.com/definition/3787/encapsulation-c