邁向物件導向程式設計的第一步:封裝(c#描述) (轉)

worldblog發表於2007-12-12
邁向物件導向程式設計的第一步:封裝(c#描述) (轉)[@more@]

邁向面向設計的第一步:封裝:namespace prefix = o ns = "urn:schemas--com::office" />

  willsound

 

緒論

 

對於一個具有豐富結構化程式設計的程式設計師來說,物件導向的程式設計可能會給他們帶來非常不自然的感覺。封裝是實現物件導向程式設計的第一步,封裝就是將資料或等集合在一個個的單元中(我們稱之為類)。被封裝的物件通常被稱為抽象資料型別。在本文中,我們將詳細學習屬性的特性。

 

封裝的意義

 

封裝的意義在於保護或者防止程式碼(資料)被我們無意中破壞。在物件導向程式設計中資料被看作是一箇中心的原素並且和使用它的函式結合的很密切,從而保護它不被其它的函式意外的修改。

封裝提供了一個有效的途徑來保護資料不被意外的破壞。相比我們將資料(用域來實現)在程式中定義為公用的(public)我們將它們(fields)定義為私有的(privat)在很多方面會更好。私有的資料可以用兩種方式來間接的控制。下面我們看一些例子來學習這兩種方法用以封裝資料。第一種方法,我們使用傳統的存、取方法。第二種方法我們用屬性(property)。無論我們使用哪種的方法,我們的目標是在使用資料的同時不能使它受到任何的破壞和改變。

 

用傳統的讀、寫方法封裝

 

讓我們來看一個例子有一個類Department,為了操縱這個類中的資料(string departname)我們定義了一個讀方法和一個寫方法。

using system;
public class Department
{
private string departname;
.......

// 讀方法
public string GetDepartname()
{
return departname;
}

//寫方法
public void SetDepartname( string a)
{
departname=a;
}

}

透過上面的方法,我們可以保護私有資料不被外部程式所破壞。現在我們使用兩個不同的方法來寫和讀資料

public static int Main(string[] args)
{
Department d = new Department();
d.SetDepartname("ELECTRONICS");
Console.WriteLine("The Department is :"+d.GetDepartname());
return 0;
}

在上面的例子中,我們不能直接訪問類Department的例項d中的私有資料(string departname),我們只能透過這兩個方法來訪問。

 

用屬性來實現封裝

 

屬性是c#引入的一種語言成分,只有很少的語言支援屬性。透過對屬性的讀和寫來保護類中的域。第一種方法體身也是一種好的方式,但用屬性來實現封裝會更方便。

現在我們來看一個例子:

using system;
public class Department 
{
private string departname;
public string Departname
{
get
{
return departname;
}
set 
{
departname=value;
}
}
}
public class Departmentmain
{
public static int Main(string[] args)
{
Department d= new Department();
d.departname="Communication";
Console.WriteLine("The Department is :{0}",d.Departname);
return 0;

}

透過上面的例子,我們可以看到如何透過屬性來實現封裝。屬性具有兩種操作get和set。Get用來返回屬性域的值。Set透過value這個變數來給屬性域賦值。屬性可以設為只讀的(read-only)。這隻需屬性只具有一個set操作。

 

只讀屬性

 

using system;
public class ReadDepartment 
{
private string departname;
public ReadDepartment(string avalue)
{
departname=avalue;
}
public string Departname
{
get
{
return departname;
}
}
}
public class ReadDepartmain
{
public static int Main(string[] args)
{
ReadDepartment d= new ReadDepartment("COMPUTERSCIENCE");
Console.WriteLine("The Department is: {0}",d.Departname);
return 0;

}

在上面的例子中我們看到了如何來實現一個只讀的屬性。類ReadDepartment擁有一個Departname屬性只實現了get操作。它省略了寫操作。這個特別的類擁有一個構造器,用來接受一個字串變數。類ReadDepartmain中的Main方法建立了一個新的物件d。對像d的例項使用了類ReadDepartment帶有一個字串引數的構造器。因為上面的屬性是隻讀的,所以我們不給給域departname賦值並且我們只側讀取此域中的值。當然屬性也可以是隻寫的(write-only),這隻需屬性只具有一個get操作。

 

只寫屬性

 

using system;
public class WriteDepartment 
{
private string departname;

public string Departname
{
set
{
departname=value;
Console.WriteLine("The Department is :{0}",departname);
}
}
}
public class WriteDepartmain
{
public static int Main(string[] args)
{
WriteDepartment d= new WriteDepartment();
d.departname="COMPUTERSCIENCE";
return 0;

}

在上面的例子中我們看到了如何來實現一個只寫的屬性。類WriteDepartment擁有一個Departname屬性只實現了set操作。它省略了讀操作。

 

總結

 

封裝是朝著物件導向程式設計邁出的第一步。本文向您展示了一些封裝的知識。用傳統的讀、寫兩種方法可以實現封裝,另一種實現封裝的方法是使用屬性。使用屬性的好處在於物件的使用者可以用一條語句來操作內部的資料。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991592/,如需轉載,請註明出處,否則將追究法律責任。

相關文章