C#虚拟(virtual)自动属性使用时的一点注意事项

本文探讨了在C#中使用虚拟(virtual)自动属性时遇到的一个奇怪现象,即在派生类重写基类自动属性时导致的递归调用问题。通过示例代码展示了问题发生的具体情况,当基类属性调用派生类的自动属性时,引发了错误的递归。文章提出了解决这个问题的两种方法,包括将派生类的属性改为传统重写形式或避免在基类中直接访问可能被重写的自动属性。
摘要由CSDN通过智能技术生成

        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.");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值