亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

屬性與字段:需要幫助來掌握屬性在字段上的使用

屬性與字段:需要幫助來掌握屬性在字段上的使用

C#
慕工程0101907 2019-12-04 10:26:44
首先,我已經閱讀了有關該主題的帖子列表,并且由于了解封裝和字段修飾符(private,public..ect),因此我不了解屬性。我已經學到的C#的主要方面之一是使用封裝在代碼中保護數據的重要性。我“認為”我理解這是因為使用了修飾符(私有,公共,內部,受保護)的能力。但是,在了解了屬性之后,我不僅在理解屬性使用方面,而且在理解C#中數據保護的總體重要性/能力(我理解為封裝)時也感到困惑。更具體地說,我在使用C#屬性時所讀的所有內容是,由于以下原因,您應嘗試使用它們代替字段:1)它們允許您在直接訪問字段時無法更改數據類型。2)它們為數據訪問添加了一定程度的保護但是,從我的“想法”開始,我發現使用字段修飾符確實是#2,除非您沒有理由更改類型(#1),否則在我看來屬性只是生成了附加代碼-因為您是(或多或少)創建隱藏方法來訪問字段,而不是直接訪問字段。然后可以將整個修飾符添加到“屬性”中,這使我對屬性訪問數據的需求的理解更加復雜。我已經閱讀了不同作者關于“屬性”的許多章節,但沒有一章真正說明了對屬性vs.字段vs.封裝(以及良好的編程方法)的良好理解。有人可以解釋:1)為什么我要使用屬性而不是字段(特別是當它出現時,我只是添加其他代碼2)在跟蹤其他人的代碼時,關于識別屬性的使用并且不將其視為簡單的方法(除了get; set是顯而易見的)的任何技巧?3)關于什么時候使用什么好的編程方法有什么通用的經驗法則?謝謝,很抱歉,我的帖子很長-我不想只問一個100x的問題,而又不解釋為什么再次問這個問題。
查看完整描述

3 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

您不必擔心通過屬性訪問字段所需的額外代碼,它會被JIT編譯器“優化”(通過內聯代碼)。除非它太大而無法內聯,否則無論如何您都需要額外的代碼。


而且用于定義簡單屬性的額外代碼也很少:


public int MyProp { get; set; } // use auto generated field.

當您需要自定義時,您以后總是可以定義自己的字段。


因此,您剩下了額外的封裝/數據保護層,這是一件好事。


我的規則:總是通過屬性公開字段


查看完整回答
反對 回復 2019-12-04
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

關于Properties的好處之一是,getter和setter可以具有不同的訪問級別??紤]一下:


public class MyClass {


  public string MyString { get; private set; }


  //...other code

}

只能在內部(例如在構造函數中)更改此屬性。閱讀有關依賴注入的信息。構造函數注入和屬性注入都通過某種形式的外部配置處理屬性設置。那里有很多框架。如果您深入研究其中的一些內容,將會對屬性及其使用有很好的了解。依賴注入還將幫助您解決有關良好實踐的第三個問題。


查看其他人的代碼時,您可以分辨某些東西是方法還是屬性,因為它們的圖標不同。同樣,在Intellisence中,屬性摘要的第一部分是單詞Property。


查看完整回答
反對 回復 2019-12-04
  • 3 回答
  • 0 關注
  • 448 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號