2013-01-14 39 views
0

可能重複:
Difference between Property and Field in C# .NET 3.5+的Structs像枚舉

示例代碼:

public struct State 
{ 
    private readonly byte state; 

    private State (byte pState) 
    { 
     state = pState; 
    } 

    // property... 

    public static State StateOne 
    { 
     get 
     { 
      return new State (1); 
     } 
    } 

    // or... 

    public static readonly State StateOne = new State (1); 
} 

我應該使用性質或領域?這個例子中的性能並不重要。

回答

1

在我看來,它是領域,因爲它是你需要的最低限度,它可能更具可讀性。但是實際上,在給出傳遞值語義的這個結構中提供的這樣一個微不足道的情況並沒有實際的區別。

特別是 - 具有緩存本地字段的屬性參數(如此處的另一個答案))由於引用相等而完全無效,因爲根據它們的定義,值類型永遠不能被引用-等於。

1

除非您將該屬性用作新實例的工廠,否則應該將返回的「新狀態(1)」緩存到私有成員中,並在第一次調用後將其返回,以初始化它。 (單體)


進一步明確:

的差額,在你寫的是場永遠指向同一個實例,而屬性總是創建一個新的實例,並返回它,所以屬性不斷創建新的實例,這可能不是您想要的,並且可能是性能問題,具體取決於具體情況。

+0

爲什麼要緩存,如果這是一個結構而不是類? – zgnilec

+1

沒有什麼區別 - 作爲一個結構體,價值無論如何都是按值傳遞的。 –

+0

@zgnilec就像我說的,它取決於你想要什麼,你想不斷創建實例或返回相同的並保留對它的引用嗎? – dutzu

1

我想在這裏使用字段而不是屬性。見MS傢伙是怎麼做similiar工作:

//String.cs 
public int Length { get; } //string has a property named Length 
public static string Empty = ... //string has a public field named Empty 

再想想「串有公共財產稱爲」,不,不是一個字符串的屬性。你的情況幾乎相同。 「國家有一個名爲的房產,其中一個」聽起來真的很糟糕。