2009-12-09 71 views
2

每當我在代碼中創建一個的UIElement後面,我會做這樣的事情:調用元素實例的這種方法是什麼?

Button button = new Button(); 
button.Content = "Click Me!"; 

但後來我什麼地方看到過這種語法,並想知道它叫什麼。我從未見過它用於我的任何.NET書籍:

Button button = new Button { Content="Click Me!" }; 

這顯然很好,因爲它很簡潔。所以我想我的問題是:

  1. 它叫什麼?
  2. 以這種方式實例化UIElement有什麼缺點嗎?

我也很難找出正確的方式來設置像CornerRadius和StrokeThickness屬性,並認爲#1的答案可能會幫助我做出更智能的搜索查詢。

+0

Re:更智能的搜索查詢...可能不是。無論您使用直接分配還是對象初始值設定項,屬性都是相同的。 – 2009-12-09 21:57:46

+0

羅伯特,你是對的,我只是測試了一些搜索,它肯定沒有幫助。是的,這就是我意識到的......早些時候我試圖設置CornerRadius = 3,但直到我試圖將CornerRadius屬性設置爲CornerRadius = new CornerRadius(3)的「正常」方式時才意識到。 – Dave 2009-12-09 23:10:24

回答

5

1:「對象初始值設定項」

2:不能;它是代碼樣本非常方便,尤其是;-p

事情你不能在一個對象初始化做:

  • 訂閱事件
  • 結合與同一集合實例集合初始化(初始值設定是要麼對象初始(設置屬性)集合初始化(添加項目)

您可以通過欺騙闖過這些限制:

Button btn; 
Form form = new Form { Text = "Hi", Controls = { (btn = new Button()) }}; 
btn.Click += delegate { ... }; 
+0

啊!謝謝!我想出了最後一個問題,那就是我忘了厚度不是雙倍厚度,而是厚度對象。 :)所以一切都很好,謝謝。如果下一次遇到問題,我會知道搜索「對象初始值設定項」! – Dave 2009-12-09 21:57:44

+0

+1有一個很好的答案+限制注意。 – 2009-12-09 22:00:07

+0

感謝您編輯和更新您的答案,Marc。我還發現事件訂閱的問題。但它仍然相當不錯。 :) – Dave 2009-12-09 22:04:16

2

.net 3.5增強了對象初始化器,它只是一個簡寫機制。

+0

嚴格地說,它是一個C#3.0的東西,而不是.NET 3.5的東西 - 您可以在從C#3.0編譯器定位到.NET 2.0時使用它。 – 2009-12-09 21:59:31

0

這就是所謂的對象初始化,它沒有任何缺點。

+0

雖然有一些限制(請參閱我的(更新)答案) – 2009-12-09 21:58:36

2

Object Initializer

它確實在引擎蓋下同樣的事情。第二種選擇使用一條線而不是兩條線,這很好用。簡明的&。 .NET> = 3.5只有

相關問題