2009-12-09 47 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只有

相关问题