HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: c#, наследование, inheritance, конвертация типов, приведение типов</p>
1 <p>Теги: c#, наследование, inheritance, конвертация типов, приведение типов</p>
2 <p>Давайте посмотрим, что получится, если мы попробуем приравнять объект от разных классов друг к другу:</p>
2 <p>Давайте посмотрим, что получится, если мы попробуем приравнять объект от разных классов друг к другу:</p>
3 <p>Ничего толкового не выйдет, и мы получим ошибку, причем несмотря на то, что присутствуют одинаковые поля с одинаковыми значениями:</p>
3 <p>Ничего толкового не выйдет, и мы получим ошибку, причем несмотря на то, что присутствуют одинаковые поля с одинаковыми значениями:</p>
4 <p>Дело в том, что<strong>язык программирования C# работает с типами очень четко</strong>- программист не может приравнять 2 объекта от двух независимых классов. Но что было бы, если бы класс A наследовался от класса B:</p>
4 <p>Дело в том, что<strong>язык программирования C# работает с типами очень четко</strong>- программист не может приравнять 2 объекта от двух независимых классов. Но что было бы, если бы класс A наследовался от класса B:</p>
5 <p>Скажем так, мы бы продвинулись немного дальше:</p>
5 <p>Скажем так, мы бы продвинулись немного дальше:</p>
6 <p>Как уже было сказано выше, C# весьма дотошно и скрупулезно подходит к вопросам типов. Если класс A унаследован от B, значит, он имеет все его методы и поля, поэтому при назначении переменной типа B объекта типа A вы не получите никаких проблем.<strong>Но в обратную сторону это работать не будет</strong>, ведь в классе B отсутствуют поля и методы, которые могут быть в A.</p>
6 <p>Как уже было сказано выше, C# весьма дотошно и скрупулезно подходит к вопросам типов. Если класс A унаследован от B, значит, он имеет все его методы и поля, поэтому при назначении переменной типа B объекта типа A вы не получите никаких проблем.<strong>Но в обратную сторону это работать не будет</strong>, ведь в классе B отсутствуют поля и методы, которые могут быть в A.</p>
7 <p><strong>Что важно запомнить на этом этапе</strong>: мы можем назначить переменной родительского типа объект дочернего, но не наоборот.</p>
7 <p><strong>Что важно запомнить на этом этапе</strong>: мы можем назначить переменной родительского типа объект дочернего, но не наоборот.</p>
8 <p>Итак, теперь у нас есть возможность обмануть правило:</p>
8 <p>Итак, теперь у нас есть возможность обмануть правило:</p>
9 <p>Здесь уже приведение типа сработает, но лишь потому, что классы имеют наследственные отношения. То есть 2 обособленных непримитивных типа вы не сможете привести друг к другу.</p>
9 <p>Здесь уже приведение типа сработает, но лишь потому, что классы имеют наследственные отношения. То есть 2 обособленных непримитивных типа вы не сможете привести друг к другу.</p>
10 <p>Смотрим последний участок кода:</p>
10 <p>Смотрим последний участок кода:</p>
11 <p>И вывод:</p>
11 <p>И вывод:</p>
12 <p><strong>Что важно запомнить в итоге</strong>: вы можете выполнить конвертацию<em>char</em>в<em>int</em>. Но вы не сможете конвертировать<em>int</em>в<em>char</em>, а причина заключается в том, что диапазон целого числа больше, чем диапазон символа.</p>
12 <p><strong>Что важно запомнить в итоге</strong>: вы можете выполнить конвертацию<em>char</em>в<em>int</em>. Но вы не сможете конвертировать<em>int</em>в<em>char</em>, а причина заключается в том, что диапазон целого числа больше, чем диапазон символа.</p>
13 <p><em>По материалам статьи "Diving in OOP (Day 2): Polymorphism and Inheritance (Inheritance)": https://www.codeproject.com/Articles/772238/Diving-in-OOP-Day-Polymorphism-and-Inheritance.</em></p>
13 <p><em>По материалам статьи "Diving in OOP (Day 2): Polymorphism and Inheritance (Inheritance)": https://www.codeproject.com/Articles/772238/Diving-in-OOP-Day-Polymorphism-and-Inheritance.</em></p>
14  
14