C#箴言之用屬性來訪問類的私人成員

來源:互聯網
上載者:User

在程式中,難免要訪問某個對象的私人成員。那麼以前實現這類功能的方法有兩種, 第一種方法最簡單,就是把成員訪問符從“private”改為 “public”即可;而另一個就是提供公有的成員訪問函數來進行訪問。那麼現 在用C#編寫程式,就不再需要採用前面所說的兩種方法了,而直接使用屬性來完成。

首先來看看三種方法的如何?以及調用的,這裡用一個例子來說明,即訪問 “EmployeeInfo”類的私人成員strName,具體如下表格所示。

  private string strName; 存取方法
修改成員訪問符 修改:

private string strName;

為:

public string strName;

EmployeeInfo empNew...;
string strNameValue = empNew.strName;
empNew.strName = "me";
公有成員函數 增加如下兩個成員函數: public string getName()
{
return strName;
}
public void setName( string Name )
{
strName = Name;
}
EmployeeInfo empNew...;
string strNameValue = empNew.getName();
empNew.setName( "me" );
屬性 增加如下屬性: public string Name
{
get{ return strName;}
set{ strName = value; }
}
EmployeeInfo empNew...;
string strNameValue = empNew.Name;
empNew.Name = "me";

那麼這三種方法有什麼區別呢,用如下的表格,可以更好的說明三者的區別。

  類的封裝性 代碼安全性 代碼繁瑣性 代碼效率
修改成員訪問符 破壞類的封裝 存在潛在危險 簡便 最高
公有成員函數 沒有破壞 安全 繁瑣,而且調用不直接 最低
屬性 沒有破壞 安全 簡便 僅次於第一種方法

(備忘:這裡用紅色表明每一子項中最不好的)

因此可以看出使用屬性不但沒有破壞類的封裝性,沒有減弱代碼的安全性,而且和第 一種方法一樣簡便,只是在效率方面要略低於第一種方法。但總體看來,在C#中用屬性來 訪問類的私人成員是不二的選擇。

不過對於使用屬性,以及如上表格所說的,難免會有人產生如下一些疑問。

疑問一:就是用屬性是否能達到成員函數那樣的效果,即完成複雜的代碼操作。

其實屬性的底層實現是藉助於成員函數,只不過這部分轉換是由系統幫忙做的,所以 在編寫屬性的時候,可以像編寫成員函數一樣,即在成員函數中所能寫的代碼片斷,完全 可以在屬性中套用。下面就貼出屬性所轉換的微軟中繼語言(MSIL)代碼。

.property instance string Name()
{
 .get instance string NameSpace.EmployeeInfo::get_Name()
 .set instance void NameSpace.EmployeeInfo::set_Name(string)
}// end of property EmployeeInfo::Name
.method public hidebysig specialname instance string get_Name() cil managed
{
 ...
}// end of method EmployeeInfo::get_Name
.method public hidebysig specialname instance void set_Name(string 'value') cil managed
{
 ...
}// end of method EmployeeInfo::set_Name

如上就是前面EmployeeInfo類的Name屬性所轉換的中繼語言代碼(不過省略了函數的 具體實現代碼,因為這裡並不是為了研究中繼語言代碼,如果需要對這部分有更多地瞭解 ,參看中繼語言相關書籍)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.