Почему бы не сделать 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();
}
}
}
Я написал довольно обширную серию блогов о том, как закрытие работает внутри. Он написан для реализации замыканий в VB.Net, но основные детали очень похожи на C #. Он должен предоставить ответы, которые вы ищете
Вот ссылка на часть 6, которая ссылается на все остальные статьи
Джон Скит написал подробное описание .
По сути, компилятор превращает внешний метод в класс и превращает все переменные, к которым обращается анонимные методы в поля класса. Анонимные методы становятся обычными методами экземпляра в классе.