В приведенном ниже коде представлен вывод;создание экземпляров общих классов в C#
Эрни Bert Elmo
Почему последний выход Elmo? Разве это не Эрни? Потому что я создаю объект dog.Creature
с new Cat();
. Я думал, что свойство Name
класса Cat
переопределяет свойство Name
класса Creature
.
class Class1
{
public static void Main(string[] args)
{
var dog = new Dog();
var cat = new Cat();
dog.Creature = new Cat();
Console.WriteLine(cat.Name); //outputs Ernie
Console.WriteLine(dog.Name); //outputs Bert
Console.WriteLine(dog.Creature.Name); //outputs Elmo, why not Ernie?
Console.Read();
}
}
public class Animal<T> where T : Creature
{
public T Creature { get; set; }
private string _name = "Oscar";
public string Name { get { return _name; } set { _name = value; } }
}
public class Creature
{
private string _name = "Elmo";
public string Name { get { return _name; } set { _name = value; } }
}
public class Cat : Creature
{
private string _name = "Ernie";
public string Name { get { return _name; } set { _name = value; } }
}
public class Dog : Animal<Creature>
{
private string _name = "Bert";
public string Name { get { return _name; } set { _name = value; } }
}
Это своего рода сбивает с толку. – sircodesalot
Компилятор создает предупреждение, объясняющее, что здесь происходит. Мой совет заключается в том, что вы привыкли читать вывод компилятора, когда пытаетесь понять его поведение. –