В C # есть поведение, которого я действительно не понимаю:
class Animal {
public string species = "animal";
public void Introduce() {
Console.WriteLine(species);
}
}
class Cat: Animal {
new public string species = "cat";
// public void Introduce() {Console.WriteLine(species);}
}
class Program
{
static void Main(string[] args)
{
var cat = new Cat();
cat.Introduce();
}
}
Этот фрагмент кода при выполнении выдает >>> animal
.
Для меня, поскольку Cat наследует Animal, вызывая cat.Introduce должен вызывать Animal.Introduce "в области действия экземпляра cat". т.е. Я не понимаю, почему программа выбирает поле species
для Animal, а не поле Cat ...
Я знаю, что могу использовать обходные пути, но я верю, что я 'Мне не хватает некоторого смысла в дизайне c #, кто-то может объяснить это поведение?
Спасибо