为什么我不能在没有强制转换的情况下访问基类的成员

本文关键字:转换 情况下 访问 成员 基类 不能 为什么 | 更新日期: 2023-09-27 18:23:36

假设我有一个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不是IHttpHandler的成员,因此您不应该期望能够在这样的变量上调用它。我相信它是Page的成员,也是Control的成员。

将变量强制转换为对象类的基类型/接口之一时,只能调用变量类型的成员(或类型的基类/接口)。

IHttpHandler接口就是一个接口。它不知道Visible成员,因为任何类都可以实现这个接口。您最终要做的是转换为继承Visible成员的类的对象。

相关文章: