Свойство имеет тип Action<string>
. Это означает, что это delegate, который берет строку и не имеет возвращаемого значения (т. Е. Ее тип возврата - void
). Таким образом, эта строка присваивает свойству Log
анонимную функцию, которая принимает значение string
и записывает его в окно отладчика.
Поскольку вы назначаете лямбда-выражение для свойства с известным типом делегирования, компилятор может вывести тип аргумента (s
) и тип возврата из контекста. Это сокращение для
this.Database.Log = (delegate (string s){ System.Diagnostics.Debug.WriteLine(s); });
Который в свою очередь, является короткий руку (как уже другие ответы) создание частной метод и назначение ссылки делегата на этот частный метод:
this.Database.Log = (Action<string>)__compiler_generated_function__;
private void __compiler_generated_function__(string s) {
System.Diagnostics.Debug.WriteLine(s);
}
Это называется _Lambda Expression_ , он был введен в C# 3 и в основном является более простым способом создания экземпляров делегата. – chomba