2013-01-17 21 views
1

所以,我有一個加密密鑰在我的代碼,如:何時使用自動屬性?

private const string _keyc = "blahblahblah"; 

private static string _key 
{ 
    get { return "blahblahblah"; } 
} 

編譯後,對ILDasm,我注意到,我可以直接看到常量的值,而不是在第二種情況下。不過,我仍然可以看到ldstr中的密鑰hidebysig...get_key()

然而,ILSpy完全按照我寫的方式獲得源代碼。

所以在這裏,我想知道,在這裏使用自動屬性真的有意義嗎?使用自動屬性還有其他優點嗎?特別是在這種簡單的情況下,建議使用自動屬性?謝謝!

+2

自動屬性只是語法糖,不是? – BoltClock

+0

只讀屬性不能是自動的,所以在這種情況下它們將不適用。 – cdhowie

+0

@BoltClock我開始2同意,但也許我可能會聽到一個更有趣的意見:) –

回答

3

只能使用時自動屬性:

  • 屬性是可讀寫;也就是說,它定義了getset訪問器。如果您只定義一個訪問器,則不能使用自動屬性。 (請注意,您可以上自動屬性來定義一個private set訪問,如果你想爲只讀從碼外的類的屬性,但是從類的內部讀寫。)
  • 你並不需要在setter中進行任何驗證 - 也就是說,屬性類型的所有值都是有效的。
  • 您不需要直接初始化後臺字段,而是從構造函數中設置屬性(或者只保留字段中的默認值)。
  • 您永遠不需要直接引用後臺字段,例如作爲refout參數。特別是,這會阻止您在現場使用System.Threading.Interlocked方法。
  • 該字段的名稱並不重要。 (序列化可能被認爲是重要的。)

根據你的例子,你正在實現一個只讀屬性(一個沒有setter)。你不能在這種情況下使用自動屬性,除非你使用這樣的模式:

class Example 
{ 
    public static string SomeProperty { get; private set; } 

    static Example() 
    { 
     SomeProperty = "some value"; 
    } 
} 

然而,僅僅從一個getter返回常數值要少得多複雜,應首選:

class Example 
{ 
    public static string SomeProperty 
    { 
     get { return "some value"; } 
    } 
} 

這段代碼很清楚,很重要。自動屬性應該使你的代碼更具可讀性。在這種情況下,他們實際上會混淆意圖,所以我不會在這裏使用。


注意,在你的示例代碼的性質是不一個自動酒店在所有;這只是一個標準的屬性。自動屬性聲明一個getter和setter,但不提供實現。

+0

換句話說,當你實現一個只讀變量時,堅持可讀性和簡單性要好得多? –

+1

@ChibuezeOpata它總是*更好地堅持可讀性和簡單性。每一段代碼都應該儘可能簡單,並且不要簡單。 – cdhowie

+0

愛因斯坦會同意。 –

相關問題