程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 總體了解C#(2 屬性)

總體了解C#(2 屬性)

編輯:C#入門知識

2.屬性

對於Delphi和Visual Basic的用戶來說,屬性是個熟悉的概念。使用屬性的目的是將獲取器/設置器[譯注:原文為getter/setter]的概念正式化,這是一個被廣泛使用的模式,尤其是在RAD(快速應用開發)工具裡。

以下是你可能在Java或C++裡寫的典型代碼:

foo.setSize (getSize () + 1);

label.getFont().setBold (true);

同樣代碼在C#裡可能會變成:

foo.size++;

label.font.bold = true;

C#代碼對於使用foo和label的用戶來說更直觀、更可讀。在實現屬性方面,差不多同樣簡單:

Java/C++:

public int getSize()

{

return size;

}

public void setSize (int value)

{

size = value;

}

C#:

public int Size

{

get {return size;}

set {size = value;}

}

特別是對於可讀寫的屬性,C#提供了一個處理此概念的更清爽的方式。在C#中,get和set方法是內在的,而在Java和C++裡則需人為維護。C#的處理方式有諸多優點。它鼓勵程序員按照屬性的方式去思考—把這個屬性標為可讀寫的和只讀的哪個更自然?或者根本不應該為屬性?如果你想改變你的屬性的名稱,你只要檢查一處就可以了(我曾看到過中間隔了幾百行代碼的獲取器和設置器【譯注:此處是指C++(Java)裡對同一個數據成員/字段(一般來說是)的獲取器和設置器】)。注釋也只要一處就可以了,這也避免了彼此同步的問題。IDE【譯注:集成開發環境】是可以幫助做這個事的(事實上,我建議他們這麼做【譯注:此處的“他們”應該是指微軟有關人員】),但應該牢記編程上的一個基本原理—盡力做好模擬我們問題空間的抽象。一個支持屬性的語言將有助於獲得更好的抽象。

【作者注:關於屬性的這個優點的一個反對意見認為:當采用這種語法時,你搞不清是在操縱一個字段還是屬性。然而,在Java(當然也包括C#)中,幾乎所有真正復雜一點的類都不會有public的字段。字段一般都只具有盡可能小的訪問級別(private/protected,或語言所定義的缺省的),並且只通過獲取器和設置器方法暴露,這也意味著你可以獲得優美的語法。讓IDE解析代碼也是完全可行的,可用不同的顏色高亮顯示屬性,或提供代碼完成信息以表明它是否是一個屬性。我們還應該看到,如果一個類設計良好,這個類的用戶將只關心該類的接口(或規范)【譯注:此處是指該類向其客戶公開(不單單是public,對其派生類來說,也可能是protected)的方法、屬性(C++/Java無顯式屬性概念)等,這裡的客戶包括其派生類等等】,而不是其內部實現。另外一個可能的爭論是屬性不夠有效率。事實上,好的編譯器可以內聯僅返回某個字段的獲取器,這和直接訪問字段一樣快。說到底,即使使用字段要比獲取器/設置器來的有效,使用屬性還有如下好處—日後可以改變屬性的字段【譯注:是指可以改變獲取器/設置器的實現代碼部分,比如改變獲取器/設置器裡所操作的字段,也可以在獲取器/設置器裡做一些校驗或修飾工作等】,而不會影響依賴於該屬性的代碼】

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved