继承 - 获取基本类型的祖父母。

问题描述 投票:0回答:1

在我的ViewStart文件中,我需要根据渲染视图的控制器类型来渲染不同的布局。

我需要确定一个控制器,在最底层是否衍生自VehicleController。

所以,假设我有一个这样的继承模型。

CarController: VehicleController

FordController: CarController

FordFocusController: FordController

现在,在FordFocusController中,我有一个简单的Index()方法,返回一个视图。

所以在ViewStart中,我可以这样确定控制器。

ViewContext.Controller.GetType().BaseType // returns FordController - correct!

现在,对于FordFocusController来说,这将返回FordController。

然而,我如何判断这是否是VehicleController的一种类型,在这种情况下,它是最低级别的?

例如,我不想做这样的事情,因为它不是动态的。

ViewContext.Controller.GetType().BaseType.GetType().BaseType.GetType()

谢谢你

c# inheritance abstract
1个回答
2
投票

在C#中,有关键字''来实现。

你可以把它当作

if (ViewContext.Controller is VehicleController)
{
 ...
}

在您的继承结构中

CarController: VehicleController  

FordController: CarController

FordFocusController: FordController

可以有这些例子。

var cc = new VehicleController();
var fc = new FordController();
var ffc = new FordFocusController();

var direct = (fc is VehicleController); // true, a ford controller is also a vehicle controller
var indirect = (ffc is VehicleController); // true, a ford focus controller is also a vehicle controller

//cast it to a variable
if (ffc is VehicleController myVehicleController) 
{
    ....here you can use myVehicleController of type VehicleController
}

问候。

迈克

© www.soinside.com 2019 - 2024. All rights reserved.