Ngôn ngữ lập trình Dart có hỗ trợ cho method cascades. Phương pháp thác sẽ cho phép Silverlight/WPF C# mã sau:Ghép phương pháp mô phỏng trong 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);
được viết thay vì như:
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âu hỏi của tôi là, liệu có một cách để mô phỏng hoặc thác phương pháp xấp xỉ chặt chẽ trong C#?
Đây là một cách tiếp cận mà tôi đã đưa ra. Với phương pháp này mở rộng:
public static T Call<T>(this T obj, Action<T> proc)
{
proc(obj);
return obj;
}
ví dụ trên có thể được viết như sau:
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"); })); }));
tôi sẽ không cho rằng đó là khá. :-) Nhưng về cơ bản nó cho phép một phong cách thông thạo được áp dụng.
Bạn chỉ đơn giản là không tìm kiếm [Object initializers] (http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx)? –
@SimonWhitehead Trình khởi tạo đối tượng chỉ hoạt động với các thuộc tính. Ví dụ này bao gồm các sự kiện và các cuộc gọi phương thức. – juharr
Tôi nghĩ rằng những gì bạn có là gần như bạn có thể nhận được. Và tôi thành thật không nghĩ rằng nó xấu hơn nhiều so với ví dụ Dart của bạn. – juharr