Если у вас есть глобальная переменная, то весь код, который работает с этой переменной - это один большой кусок кода и если вы работаете с какой-то его частью, то вам придется копаться во всех его частях. От того, что этот код у вас будет разбит по классам, инкапсуляция автомагически не появляется. Я потому и делаю акцент на том, что дело не в классах, замыканиях и т.п., а в инкапсуляции. Класс - один из инструментов обеспечения инкапсуляции, но это всего лишь инструмент.
Нету вообще необходимости использовать классы. Вы можете всю вашу программу написать многострочным полотном в одной единственной функции. Но если вам потом нужно будет что-то поменять, то вы снова будете разбираться со всем этим полотном. Если же вы будете инкапсулировать различные аспекты вашего приложения, например, с помощью классов, то потом вам нужно будет изменять только те типы, к котором относится изменяемая логика.
Closure - тот же самый класс, только в функциональном стиле. Если вы решите эту проблему с помощью замыкания, то это будет эквивалентно решению через создание нового класса.
Скорее всего, ваш тип нарушает Single responsibility principle (Принцип единственной обязанности) - один из базовых принципов объектно-ориентированного программирования. Подумайте, какую общую задачу решают методы, которым вы ходите дать исключетельный доступ к переменным, и выделите эту роль в отдельный тип.
Ну, сообщение с ошибкой как бы намекает, что у вас есть два пути решения проблемы - а) убедиться, что стоит нужная версия фреймворка и б) обратиться в техподдержку keepass. Какие еще ответы вы ожидаете получить, задавая тут такой вопрос?
Я сделал для вас пример реализации описанного вами сценария. Повторюсь, мне не нравится использование кнопок тут - есть более подходящие для этой задачи контролы, но это уже детали дизайна, в целом ваша задача достаточно стандартна и понятна. https://dl.dropboxusercontent.com/u/40318759/Borsch.zip
Ок, хоть для вашего примера использовать кнопки - плохой дизайн, на мой вкус, но допустим. Т.е. утром юзер видит новую кнопку "Борщ". Нажимает на нее. Как вы собираетесь реагировать на нажатие этой кнопки? Как именно вы собираетесь реализовать "отобразить рецепт борща" при нажатии на автоматически сгенерированную кнопку "борщ"?
Вы бы описание, код, текст, скриншот ошибки приложили бы. Ну а полезнее всего копать такие проблемы, конечно, не на тостере, а на форуме/в почту техподдержки Keepass.
@OmarFirst: вы переформулировали свой вопрос, но не добавили никакой новой информации о том ЗАЧЕМ вы показываете юзеру 10 кнопок вечером и 11 утром. Что должно произойти, когда он нажмет на кнопку номер 5? И зачем ему нажимать на эту кнопку? Как он принимает решение, какую кнопку нажать?
@DancingOnWater: ParameterModifier используется только с СОМом. Дефолтный биндер не использует этот параметр, т.е. при вызове .net методов он не нужен.