Język programowania Dart ma obsługę method cascades. kaskady metoda pozwoliłaby następujące Silverlight/WPF C#:Symulacja kaskad metod w języku 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);
być napisane zamiast jak:
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"))));
Moje pytanie brzmi, czy istnieje sposób, aby symulować lub metoda ściśle przybliżone kaskady w C#?
Oto jedno podejście, które wymyśliłem. Biorąc pod uwagę tę metodę rozszerzenia:
public static T Call<T>(this T obj, Action<T> proc)
{
proc(obj);
return obj;
}
powyższy przykład można zapisać następująco:
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"); })); }));
ja nie twierdzą, że jest ładna. :-) Ale zasadniczo pozwala na zastosowanie płynnego stylu.
Czy po prostu nie szukają [inicjatorów obiektu] (http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx)? –
Ataktory obiektów @SimonWhitehead działają tylko z właściwościami. Przykład obejmuje zdarzenia i wywołania metod. – juharr
Myślę, że to, co masz, jest tak blisko, jak tylko możesz. I szczerze mówiąc nie uważam, że jest o wiele brzydsza niż przykład Dart. – juharr