Хорошо, это немного абстрактно, но здесь идет речь:
Я создаю веб-сайт и хочу иметь поле "foo", к которому я могу получить доступ с любой страницы сайта. Я подумал, что лучший способ сделать это - создать подкласс Page, называемый "bar", добавить к нему защищенное поле "foo", и затем все мои веб-страницы будут удалены из "bar". Та-да. На каждой странице теперь есть foo.
Но теперь я добавляю элементы управления на свои страницы и хочу, чтобы они имели доступ к "foo".
Что ж, теперь foo не может быть защищен, поэтому он открыт. Хорошо. Но как контроллеры узнают о «foo»? Я могу получить доступ к foo, выполнив что-то вроде этого в моем контроле:
Foo foo = ((Bar)Page).foo;
Это работает, но мне кажется немного уродливым. Я действительно хотел бы просто иметь возможность использовать foo. Я полагаю, эй, может быть, я могу сделать тот же трюк с моими элементами управления, что я сделал для страницы. Я создаю новый класс "blargh", который наследуется от UserControl, и безобразно хватаю foo. Тогда у меня есть контроль от наследства. Ура!
За исключением того, что это не работает. Когда я запускаю проект, он жалуется на строку, пытающуюся получить доступ ((Bar) Page) .foo, потому что Page имеет значение null. Зачем? Как Пейдж может быть нулевым? Когда я смотрю на стек вызовов, мне не помогают.
Есть ли простой, понятный способ сделать это? Я лаю не на том дереве?