【发布时间】:2013-10-16 08:20:56
【问题描述】:
一个理论问题.. 我在课堂上有一个虚拟财产。另一个扩展该类的类,即使重写了虚拟属性,似乎也从未真正重写基属性的 getter 或 setter 方法。我错过了什么?
class BaseClass
{
protected string bla;
public virtual string Bla
{
get { return this.bla; }
set { this.bla = value; }
}
protected BaseClass() { }
public BaseClass(string _bla)
{
this.Bla = _bla;
}
}
class ChildClass : BaseClass
{
private string bla2;
public override string Bla
{
get
{
return bla2;
}
set
{
bla2 = value;
}
}
public ChildClass(string _bla2) : base("AAA")
{
this.Bla = _bla2;
}
}
class Program
{
static void Main(string[] args)
{
var c = new ChildClass("Me");
Console.WriteLine(c.Bla);
Console.ReadLine();
}
}
我想,我得到了答案。
【问题讨论】:
-
该代码无法编译。如果基类的属性设置器受到保护,则不能将派生类的
Bla属性设置器设为公开。ChildClass也没有默认构造函数,所以var c = new ChildClass();无法编译。 -
@VenkatRenukaPrasad 您的代码不起作用。覆盖受保护的继承成员时,您无法更改访问修改。
-
同样不存在无参数的
ChildClass构造函数。 -
修复了“受保护”问题,我的结果很好。无论我将 c 声明为 var 还是 ChildClass。
标签: c# properties overriding virtual