我正在寻找一种方法来获取向上转换对象的可能类型。例如:我有一个MyControl类型的控件,它继承了Control。现在,当MyControl类型的对象被向下转换为Control时,有没有办法找出,如果它是顶级对象类型或现在何时获取类型(s)可将其上抛的(在本例中为MyControl)-我希望它向上转换到MyControl(通过反射)并通过反射获得一个属性。但是我不知道在我必须这样做的地方使用MyControl。
MyControl是用new实现的Visible。现在当我调用control.Visible = true时,它会调用控件的Visible,但我必须调用MyControl的Visible。
谢谢你的帮助。
4条答案
按热度按时间chhkpiq41#
您还可以使用以下命令:
如果使用"as",. NET Framework将检查控件是否来自该类型,如果可以强制转换,. NET Framework将强制转换并返回类型MyControl,否则将返回null。
所以基本上,它和以前的答案一样,但更干净(imho,你可以想不同的)
cbeh67ev2#
有:
这将对类型层次结构的任何部分起作用。如果变量本身是基类型,下面的检查将不起作用:
但是,听起来您需要重写方法或属性的行为。在正常情况下,您将重写
Visible
:然而,只有当基类没有被密封,并且您想要覆盖的成员是
abstract
或virtual
时,才需要这样做。如果不是这种情况,那么我会坚持强制转换为派生类型......虽然不理想,但选项不多。听起来还像是您试图隐藏基成员,如下所示:
这只在你有一个对类型本身的引用时有效,如果你有一个对基类型的引用,成员隐藏就不起作用了,它不知道成员在派生类型中是隐藏的:
(In如果
Visible
被重写,则它将来自派生类)。lhcgjxsq3#
nnvyjq4y4#
向上转换是将对象放置在引用基类的子类中
向下强制转换是通过在子类的引用中放置对基类的引用来进行显式强制转换