У меня проблемы с доступом к свойствам базового класса в двойном производном классе. Я включил простой пример моей проблемы ниже.
public class Device
{
public Device(string status)
{
Status = status;
}
public string Status { get; set; }
public void SetStatus(string value)
{
Status = value;
}
public string GetStatus()
{
return Status;
}
}
public class Light : Device
{
public Light(string status) : base(status)
{
}
public void SetStatus(string value)
{
base.SetStatus(value)
}
public string GetStatus()
{
return Status;
}
}
public class ColoredLight : Light
{
public ColoredLight(string status) : base(status)
{
}
public void SetStatus(string value)
{
base.SetStatus(value)
}
public string GetStatus()
{
return Status;
}
}
// note: The derived classes also have some properties of their own, of course,
// but they are not needed to illustrate the problem
Я знаю, что свойство Status базового класса определенно получает значение, но если я вызову метод GetStatus в классе ColoredLight, он вернет null.
Если я изменю функции GetStatus в классе Light и ColoredLight, чтобы они возвращали base.GetStatus(), он возвращает правильное значение. Однако я думал, что должна быть возможность доступа к свойствам базового класса непосредственно в производных классах. Я делаю что-то неправильно? Или это просто так надо делать?
Заранее спасибо за помощь.
edit: [Решено] Проблема, с которой я столкнулся, была связана с глупостью и недосмотром, поскольку я объявил свойство Status как в классе Device, так и в классе Light. Однако приведенные ниже решения улучшили мое понимание использования «защищенного», «виртуального» и «переопределения» в C #, поэтому я оставлю вопрос как есть, чтобы он мог помочь и другим!