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

时间:2020-04-26 13:42:23

标签: c# inheritance abstract

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

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

因此,假设我有一个这样的继承模型:

<div class="index-tops">
    @foreach ($episodes as $date => $group)

        <p>{{ $group->first()->created_at->format('jS F Y') }}</p>


        @foreach ($group as $episode)
           ...
        @endforeach
    @endforeach
</div>

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

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

CarController: VehicleController

FordController: CarController

FordFocusController: FordController

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

但是,如何确定这是VehicleController类型,在这种情况下,它处于最低级别?

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

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

谢谢

1 个答案:

答案 0 :(得分:2)

在C#中,为此使用了关键字“ is”。

您可以将其用作

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
}

问候

迈克