Почему я не могу получить доступ к членам базового класса без приведения? - PullRequest
3 голосов
/ 08 февраля 2012

Допустим, у меня есть System.Web.IHttpHandler, чей базовый класс ASP.login_aspx, чей базовый класс MyCMS.Admin.Login, чей базовый класс ... и т. Д. ... вплоть до System.Web.UI.Page и, конечно, object.

Почему я должен разыграть свой IHttpHandler как MyCMS.Admin.Login, прежде чем я смогу получить доступ к членам этого типа и ниже?

Пример:

IHttpHandler result = base.GetHandler(context, requestType, virtualPath, path);
bool isVisible = result.Visible;//Does not work
bool isVisible = ((MyCMS.Admin.Login)(result)).Visible;//Works
//Noting that Visible is a member of System.Web.UI.Page

ДляЯ не ожидаю такого результата. Visible должен работать, я просто хочу знать, почему это не так.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Visible не является членом IHttpHandler, поэтому вы не должны ожидать, что сможете вызвать его для такой переменной.Я полагаю, что это член Page, то есть Control.

Когда вы приводите переменную к одному из базовых типов / интерфейсов класса объекта, вы можете вызывать только те члены, которые находятся натип переменной (или базовые классы / интерфейсы типа , которые ).

1 голос
/ 08 февраля 2012

Интерфейс IHttpHandler - это всего лишь интерфейс.Он не знает члена Visible, поскольку любой класс может реализовать этот интерфейс.В конечном итоге вы приводите объект класса, который наследует член Visible.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...