C# наследования

168
28 мая 2018, 06:20

Есть клас родительский и дочерний клас Foo и FooInherited соответствено

class Foo
{
    public name { get; set;}
    public Foo()
    {
        name = "Это первый класс";
    }
    class FooInherited:Foo
    {
        public FooInherited()<br>{
        name = "Это второй класс";
    }
    public void JustTest()
    {
        Console.WriteLine("Just for test");
    }
}

Дальше такая запись:

Foo myClass = new FooInherited();

Теперь поле name равно "Это второй класс", но при этом метод JustTest() , который присутсвует в дочернем класе не доступен. Почему при обращении к myClass.name мы получаем значение, которое присутсвует в дочернем класе, но не можем обратиться к методу дочернего класа?

Answer 1

Тут дело в ссылке, которую вы объявили. Если перевести ваши действия простым языком:
1. Вы объявляете ссылку Foo myClass.
2. Теперь myClass знает, что он будет ссылаться на экземпляр класса Foo.
3. В эту ссылку вы назначаете новый экземпляр класса FooInherited. Т.к. это класс наследуется от Foo, а следовательно имеет все поля и методы из него никаких противоречий не возникает.

Другими словами, вы объявили, что ссылка будет направлена на экземпляр класса Foo. И обращаясь к ней вы можете вызвать только то, объявлено в классе Foo. Назначить же в эту ссылку вы можете либо сам экземпляр, либо любого его наследника.

READ ALSO
Книги и учебные ресурсы по C#

Книги и учебные ресурсы по C#

Вопросы о литературе по различным языкам программирования возникают очень частоЗдесь мы попробуем собрать лучшие ответы и рекомендации...

615
C# вложеные класы

C# вложеные класы

Существуют два класа : один дочерний, второй родительский

195
Заполнить DataGridView из DataTable

Заполнить DataGridView из DataTable

Нужно заполнить строки DataGridView из DataTableПри заполнении, приведённом ниже, уже имеющийся DGV склеивается с DT

254
Как использовать JSON5 в C#

Как использовать JSON5 в C#

Консольное приложение на С#

224