封裝:C#描敘 — 使用屬性的好處

來源:互聯網
上載者:User
  緒論  對於一個具有豐富結構化程式設計經驗的程式員來說,物件導向的程式設計可能會給他們帶來非常不自然的感覺。封裝是實現物件導向程式設計的第一步,封裝就是將資料或函數等集合在一個個的單元中(我們稱之為類)。被封裝的對象通常被稱為抽象資料類型。在本文中,我們將詳細學習屬性的特性。  封裝的意義  封裝的意義在於保護或者防止代碼(資料)被我們無意中破壞。在物件導向程式設計中資料被看作是一個中心的原素並且和使用它的函數結合的很密切,從而保護它不被其它的函數意外的修改。封裝提供了一個有效途徑來保護資料不被意外的破壞。相比我們將資料(用域來實現)在程式中定義為公用的(public)我們將它們(fields)定義為私人的(privat)在很多方面會更好。私人的資料可以用兩種方式來間接的控制。下面我們看一些c#例子來學習這兩種方法用以封裝資料。第一種方法,我們使用傳統的存、取方法。第二種方法我們用屬性(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操作。它省略了讀操作。 總結 封裝是朝著物件導向程式設計邁出的第一步。本文向您展示了一些封裝的知識。用傳統的讀、寫兩種方法可以實現封裝,另一種實現封裝的方法是使用屬性。使用屬性的好處在於對象的使用者可以用一條語句來操作內部的資料。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.