Есть клас родительский и дочерний клас 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 мы получаем значение, которое присутсвует в дочернем класе, но не можем обратиться к методу дочернего класа?
Тут дело в ссылке, которую вы объявили. Если перевести ваши действия простым языком:
1. Вы объявляете ссылку Foo myClass.
2. Теперь myClass знает, что он будет ссылаться на экземпляр класса Foo.
3. В эту ссылку вы назначаете новый экземпляр класса FooInherited. Т.к. это класс наследуется от Foo, а следовательно имеет все поля и методы из него никаких противоречий не возникает.
Другими словами, вы объявили, что ссылка будет направлена на экземпляр класса Foo. И обращаясь к ней вы можете вызвать только то, объявлено в классе Foo. Назначить же в эту ссылку вы можете либо сам экземпляр, либо любого его наследника.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вопросы о литературе по различным языкам программирования возникают очень частоЗдесь мы попробуем собрать лучшие ответы и рекомендации...
Нужно заполнить строки DataGridView из DataTableПри заполнении, приведённом ниже, уже имеющийся DGV склеивается с DT