[英]Accessing properties of the base class in a double derived class
我在双重派生类中访问基类的属性时遇到麻烦。 我在下面提供了一个简单的问题示例。
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属性肯定会设置为一个值,但是如果我在ColoredLight类中调用GetStatus方法,它将返回null。
如果我将Light和ColoredLight类中的GetStatus函数更改为返回base.GetStatus(),它将返回正确的值。 但是,我认为应该可以直接在派生类中访问基类的属性。 难道我做错了什么? 还是这应该怎么做?
先谢谢您的帮助。
编辑:[已解决]我遇到的问题是由于愚蠢和我自己的疏忽所致,因为我在Device和Light类中都声明了Status属性。 但是,以下解决方案使我对C#中“受保护”,“虚拟”和“替代”的用法有了更深入的了解,因此我将原样保留该问题,以便它可能对其他人也有帮助!
完全摆脱GetStatus()和SetStatus()方法,这不是java。 而是将属性设为virtual
并根据需要在后代类中覆盖它。
public class Device
{
public Device(string status)
{
this._status = status;
}
protected _status;
public virtual string Status
{
get
{
return _status;
}
set
{
_status = value;
}
}
}
public class Light : Device
{
public Light(string status) : base(status)
{
}
}
public class ColoredLight : Light
{
public ColoredLight(string status) : base(status)
{
}
public override string Status
{
get
{
return _status;
}
set
{
_status = value;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.