Наследование - Получить бабушку и дедушку базового типа - PullRequest
0 голосов
/ 26 апреля 2020

В моем файле ViewStart мне нужно отобразить другой макет в зависимости от типа контроллера, который отображает представление.

Мне нужно определить, является ли контроллер на самом низком уровне производным от VehicleController.

Итак, скажем, у меня есть такая модель наследования:

CarController: VehicleController

FordController: CarController

FordFocusController: FordController

Теперь в FordFocusController у меня есть простой метод Index (), возвращающий View.

Итак, во ViewStart я могу определить контроллер следующим образом:

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

Теперь для FordFocusController, это вернет FordController.

Однако как я могу определить, является ли это типом VehicleController, который в данном случае находится на самом низком уровне?

Например, я не хочу делать что-то подобное, потому что это не динамично c!

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

Спасибо

1 Ответ

2 голосов
/ 26 апреля 2020

В 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
}

приветствия,

Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...