Dartプログラミング言語はmethod cascadesをサポートしています。メソッドのカスケードは、次のSilverlight/WPF C#のコードを可能にする:としてC#のシミュレーション方法カスケード
var listBox = new ListBox();
listBox.Width = 200;
listBox.MouseEnter += (s, e) => Console.WriteLine("MouseEnter");
var button1 = new Button() { Content = "abc" };
button1.Click += (s, e) => Console.WriteLine("button1.Click");
listBox.Items.Add(button1);
var button2 = new Button() { Content = "def" };
button2.Click += (s, e) => Console.WriteLine("button2.Click");
listBox.Items.Add(button2);
ContentPanel.Children.Add(listBox);
が代わりに書き込まれるように:私の質問がある
ContentPanel.Children.Add(
new ListBox()
..Width = 200
..MouseEnter += ((s, e) => Console.WriteLine("MouseEnter"))
..Items.Add(
new Button()
..Content = "abc";
..Click += ((s, e) => Console.WriteLine("button 1 Click")))
..Items.Add(
new Button()
..Content = "def";
..Click += (s, e) => (Console.WriteLine("button 2 Click"))));
、C#で近似法カスケードをシミュレートまたは密接にする方法は何ですか?
私が思いついたアプローチは次のとおりです。この拡張メソッドを考えると次のように
public static T Call<T>(this T obj, Action<T> proc)
{
proc(obj);
return obj;
}
上記の例では、書くことができます。
ContentPanel.Children.Add(
new ListBox().Call(o => {
o.Width = 200;
o.MouseEnter += (s, e) => Console.WriteLine("MouseEnter");
o.Items.Add(
new Button().Call(b => {
b.Content = "abc";
b.Click += (s, e) => Console.WriteLine("button 1 Click"); }));
o.Items.Add(
new Button().Call(b => {
b.Content = "def";
b.Click += (s, e) => Console.WriteLine("button 2 Click"); })); }));
私はかなりだと主張しません。 :-)しかし、基本的に流暢なスタイルを適用することができます。
を必要に応じて、私に教えてください、あなたは、単に[オブジェクト初期化子](http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx)を探していませんか? –
@SimonWhiteheadオブジェクトイニシャライザはプロパティでのみ動作します。この例には、イベントとメソッド呼び出しが含まれています。 – juharr
私はあなたが持っているものは、あなたが得ることができるほど近くにあると思います。そして、私は正直なところ、あなたのダーツの例よりはるかに醜いとは思わない。 – juharr