C#3.0及以后版本中提供的自动属性,的确省了几行代码,程序看起来也优雅不少。但最近在使用一个虚拟(virtual)自动属性时,发现了一个怪异现象,见如下代码:
public class Program
{
static void Main(string[] args)
{
TErrorEx er = new TErrorEx();
er.Do();
}
}
public class TError
{
public virtual string ErrorMessage { get; set; } // virtual自动属性
public virtual bool HasError
{
get
{
Console.WriteLine("base.HasError called.");
Console.ReadKey();
return !string.IsNullOrEmpty(this.ErrorMessage); // 去掉this现象依旧,该this将指向派生类override的ErrorMessage
}
}
}
public class TErrorEx : TError
{
public override string ErrorMessage // 重写基类自动属性
{
get
{
Console.WriteLine("this.ErrorMessage called.");