[英]Should I use public properties and private fields or public fields for data?
[英]Public Properties instead of PRIVATE fields
首先我只想澄清,避免不必要的重復標記,這個問題不是一個重復的這一個 ,既不重復這另外一個我已經搜查或他人。 為什么? 他們都使用經典C#的“屬性”談論公共領域或私有領域。
我的問題是為什么我應該寫這樣的東西( 公共屬性 )
class myClass{
public int AValue{get; set;}
}
當我可以改寫時( 不涉及任何屬性的 私有字段 )(只是經典的舊C ++風格的編寫方式)
class myClass{
private int aValue;
public int getValue{ return aValue;}
public void setValue(int value){ aValue=value;}
我撓頭,閱讀許多資源,答案和問題,但沒有人回答這個問題。 他們都在談論相對於公共字段的優勢(這不是我要問的),或者是關於新自動屬性相對於舊屬性的好處(我也沒有問過)。
我想我的問題是,為什么C#沒有使用在Java或C ++中運行良好的相同編寫方式。 我看不出任何優勢。 我非常感謝有人教給我這個好處,因為afaik不在其他地方寫過。 (甚至不在我的C#書籍中)
根據我的理解,您所指的公共屬性僅僅是封裝了您上面描述的模式的語法糖。
我認為這取決於可讀性和平台標准。 盡管您所談論的方式沒有錯,但我們還需要考慮可維護性。 對於另一位.Net開發人員而言,該模式不適合他們慣常使用的模式,並可能引起混亂。
這是膚淺的原因,只是編寫了很多代碼。 尤其是當您有DTO之類的東西時。
c#中的屬性被進一步封裝,並最終轉換為專用字段的中間語言和相應的Get Set方法,因此您不必打擾
為此,自動訪問器是語法糖。 生成的代碼具有一個后備字段和get / set方法。 字段沒有訪問器,而屬性卻有。
公共/私有是關於封裝/安全性,即誰應該能夠訪問您的信息。
用您介紹它的方式(編寫get
和set
方法)是好的,但是您有兩種方法-一種用於設置字段的值,另一種用於獲取該值。 使用屬性對我來說更自然,因為用一個名稱“封裝” set
和get
方法並以這種方式訪問它更好(我認為)。
使用public int AValue { get; set; }
主要原因 public int AValue { get; set; }
public int AValue { get; set; }
而不是私有字段和一對getAValue
和setAValue
函數,這就是在C#中完成事情的方式。 從“代碼在運行時的工作方式”的角度來看,這兩者與“自動屬性”(使編譯器負責生成私有支持字段的屬性類型)幾乎相同轉換成與您編寫的代碼非常相似的代碼(有關示例,請參見此stackoverflow問題接受的答案 )。
問題中的主要“優勢”(為什么使用屬性而不是字段和獲取/設置方法對)是可預測性和可理解性。 使用您的代碼的任何人都希望看到屬性,而不是私有字段/獲取/設置實現,因此您的代碼將更容易理解。 看到它的實現方式不同,將使他們產生疑問, 為什么要這樣做,並認為這是有原因的,因此在理解您的代碼時會使它們變慢。
C#的getter和setter是語法糖,它刪除了嘈雜的方法名稱( SetValue
或GetValue
與SetValue
Value
)並提高了代碼的可讀性。
在使用代碼時,可讀性要好得多
// Without properties
var myClass = new MyClass();
myClass.SetAValue(aValue);
myClass.SetBValue(bValue);
//And with properties
var myClass = new MyClass
{
AValue = aValue,
BValue = bValue
}
因為它只是語法糖,所以每個開發人員/團隊都可以隨意使用它。
一些團隊有“規則”,即屬性只能用於獲取/設置值,而在獲取器/設置器中沒有任何“繁瑣”的邏輯。 並且應該使用方法來設置或獲取執行某些“繁重”操作的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.