Действительно следующее:
Код: Выделить всё
static void K() {}
static void Main()
{
var k = new Action(new Action(new Action(K))));
}
Вывод ILSpy выглядит следующим образом: следует:
Код: Выделить всё
new Action(new Action(new Action(null, ldftn(K)), ldftn(Invoke)).Invoke);
Код пока неясен. Есть ли у нас делегат с тройной оберткой (реальный) или внутренний делегат просто «скопирован» во внешние (моя первоначальная мысль).
Конечно, если бы намерение было как будто компилятор выдал код, следовало бы написать:
Код: Выделить всё
var k = new Action(new Action(new Action(K).Invoke).Invoke);
Может ли кто-нибудь объяснить причину этого «неожиданного» преобразования?
Аналогично декомпилированному коду.
Может ли кто-нибудь объяснить причину этого «неожиданного» преобразования?
Аналогично декомпилированному коду.
Кто-нибудь может объяснить причину этого «неожиданного» преобразования?
Аналогично декомпилированному коду.
Может ли кто-нибудь объяснить причину этого «удивительного» преобразования?
Аналогично декомпилированному коду.
Может ли кто-нибудь объяснить причину этого «удивительного» преобразования?
Аналогично декомпилированному коду.
Кто-нибудь может объяснить причину этого «удивительного» преобразования? p>
Обновление:
Я могу придумать только один возможный вариант использования этого; преобразование типов делегатов. Например:
Код: Выделить всё
delegate void Baz();
delegate void Bar();
...
var k = new Baz(new Bar( new Action (K)));
Подробнее здесь: https://stackoverflow.com/questions/807 ... nstructors
Мобильная версия