Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继承-获取基类型祖父母_C#_Inheritance_Abstract - Fatal编程技术网

C# 继承-获取基类型祖父母

C# 继承-获取基类型祖父母,c#,inheritance,abstract,C#,Inheritance,Abstract,在ViewStart文件中,我需要根据渲染视图的控制器类型渲染不同的布局 我需要确定最低级别的控制器是否来自VehicleController 假设我有这样一个继承模型: CarController: VehicleController FordController: CarController FordFocusController: FordController 现在,在FordFocusController中,我有一个简单的Index()方法返回一个视图 因此,在ViewStart中

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

我需要确定最低级别的控制器是否来自VehicleController

假设我有这样一个继承模型:

CarController: VehicleController

FordController: CarController

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

因此,在ViewStart中,我可以像这样确定控制器:

ViewContext.Controller.GetType().BaseType // returns FordController - correct!
现在,对于FordFocusController,这将返回FordController

然而,我如何判断这是否是一种车辆控制器,在这种情况下,它处于最低级别

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

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

在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
}
您好

Mike

在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
}
您好


Mike

您可以通过执行<代码>is VehicleController myVariable将强制转换版本分配给变量您可以通过执行<代码>is VehicleController myVariable将强制转换版本分配给变量