2012-07-13 15 views

回答

7

因爲我們知道他們是在運行時

自動屬性不會在運行時創建創建的,他們是在編譯時生成的。非常像using,它們有助於語法糖減少打字量。他們只是翻譯成您手動編寫的代碼。

沒有性能差異。除了支持字段名稱之外,生成的代碼與手動完成代碼相同。

正如@dasblinkenlight所強調的那樣,作爲「安全名稱」的支持名稱(如in,無法在C#中創建它)可能會導致無法正確處理名稱的序列化問題。

+0

是的,這是正確的。你可以用你選擇的反編譯器來驗證,比如ild​​asm。一些像Reflector和dotPeek這樣的工具可能是「聰明的」,足以將它轉換回自動屬性。 – vcsjones 2012-07-13 13:55:58

+2

+1您可能想要提到,在使用自動屬性序列化類對象時,命名差異可能很重要。 – dasblinkenlight 2012-07-13 13:56:21

+0

@dasblinkenlight我會留下你的評論。這個問題不是關於序列化或與自動屬性共同陷阱。 – 2012-07-13 14:00:43

1

自動屬性語法糖意味着他們的寫作性質

從MSDN採取的簡寫:

在C#3.0及更高版本,自動實現的屬性使 財產申報更簡潔時在屬性訪問器中不需要額外的邏輯 。它們還使客戶端代碼能夠創建 對象如下所示聲明屬性 編譯器創建的私有匿名後臺字段只能通過屬性的get和set訪問器訪問 。

http://msdn.microsoft.com/en-us/library/bb384054(v=vs.90).aspx

2

有沒有區別。自動屬性在編譯時轉換爲普通屬性。所以這樣的:

public int Prop { get; set; } 

製成的東西等價於:

private int _PropField; 

public int Prop { 
    get { return _PropField; } 
    set { _PropField = value; } 
} 
相關問題