Как лямбда-выражения работают внутренне?

Почему бы не сделать make MyParameterNames Virtual и переопределить их в производных классах, чтобы вызвать исключение

public abstract class BaseClass
{
    public virtual List<string> MyParameterNames
    {
        get;
    }
}

public class DerivedClass : BaseClass
{
    public override List<string> MyParameterNames
    {
        get
        {
            throw new Exception();
        }
    }
}
7
задан Community 23 May 2017 в 10:33
поделиться

2 ответа

Я написал довольно обширную серию блогов о том, как закрытие работает внутри. Он написан для реализации замыканий в VB.Net, но основные детали очень похожи на C #. Он должен предоставить ответы, которые вы ищете

Вот ссылка на часть 6, которая ссылается на все остальные статьи

8
ответ дан 6 December 2019 в 15:23
поделиться

Джон Скит написал подробное описание .

По сути, компилятор превращает внешний метод в класс и превращает все переменные, к которым обращается анонимные методы в поля класса. Анонимные методы становятся обычными методами экземпляра в классе.

6
ответ дан 6 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: