2013-02-09 6 views
1

я был от C# на некоторое время, и теперь, когда я пытаюсь прочитать код, у меня трудное время найти смысл этого:Глядя на имя C# синтаксис

var server = new WebSocketServer("ws://localhost:8181"); 
server.Start(socket => 
{ 
    socket.OnOpen =() => 
    { 
     Console.WriteLine("Open!"); 
     allSockets.Add(socket); 
    }; 
    socket.OnClose =() => 
    { 
     Console.WriteLine("Close!"); 
     allSockets.Remove(socket); 
    }; 
    socket.OnMessage = message => 
    { 
     Console.WriteLine(message); 
     allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); 
    }; 
}); 

Какое название для синтаксиса socket => { .. } и где можно найти текст? И в какой версии C# он представлен? Является ли =() => { .. } тем же?

+0

Это выражение лямбда, анонимный делегат. –

+0

Вы имеете в виду «анонимный метод». –

+0

Все, что я могу сказать, это то, что это действительно уродливый синтаксис для чтения! – Mehran

ответ

4

Это лямбда-выражение, в основном это ярлык для определения делегатов, которые являются анонимными методами. Он был введен в C# 3 вместе с LINQ, чтобы сделать его использование намного проще. Синтаксис выглядит следующим образом:

parameters => body 

Обычно компилятор может сделать вывод, в некотором роде тип параметра, поэтому вы видите только имена параметров.

+1

Делегаты * ссылки * на методы; они на самом деле не методы. Делегат может ссылаться на обычный метод или анонимный метод. Однако выражение лямбда является анонимным методом. –

+0

@MatthewWatson lambdas также являются ссылками, я просто хотел, чтобы мой ответ был простым. – BlackBear

+0

Er, а не они - это методы, но вы можете создать делегат для хранения ссылки на них. http://msdn.microsoft.com/en-gb/library/bb397687.aspx –

Смежные вопросы