Операции с экземплярами/объектами при наследовании в C#

Давайте посмотрим, что получится, если мы попробуем приравнять объект от разных классов друг к другу:

Ничего толкового не выйдет, и мы получим ошибку, причем несмотря на то, что присутствуют одинаковые поля с одинаковыми значениями:

Дело в том, что язык программирования C# работает с типами очень четко — программист не может приравнять 2 объекта от двух независимых классов. Но что было бы, если бы класс A наследовался от класса B:

Скажем так, мы бы продвинулись немного дальше:

Как уже было сказано выше, C# весьма дотошно и скрупулезно подходит к вопросам типов. Если класс A унаследован от B, значит, он имеет все его методы и поля, поэтому при назначении переменной типа B объекта типа A вы не получите никаких проблем. Но в обратную сторону это работать не будет, ведь в классе B отсутствуют поля и методы, которые могут быть в A.

Что важно запомнить на этом этапе: мы можем назначить переменной родительского типа объект дочернего, но не наоборот.

Итак, теперь у нас есть возможность обмануть правило:

Здесь уже приведение типа сработает, но лишь потому, что классы имеют наследственные отношения. То есть 2 обособленных непримитивных типа вы не сможете привести друг к другу.

Смотрим последний участок кода:

И вывод:

Что важно запомнить в итоге: вы можете выполнить конвертацию char в int. Но вы не сможете конвертировать int в char, а причина заключается в том, что диапазон целого числа больше, чем диапазон символа.

По материалам статьи «Diving in OOP (Day 2): Polymorphism and Inheritance (Inheritance)»: https://www.codeproject.com/Articles/772238/Diving-in-OOP-Day-Polymorphism-and-Inheritance.