C#的继承一道很容易出错的题目

相信大家对C#的继承应该很熟悉了吧,那么看看下面这道题目你做对了吗?

 

 public class A
    {
        public string Type = "Type A";
        public virtual string Show()
        {
            return "Show "+Type;
        }
    }
    public class B : A
    {
       public string Type = "Type B";
        public override string Show()
        {
            return "Show "+Type;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A a = new B();
            Console.WriteLine(a.Type);
            Console.WriteLine(a.Show());
            Console.ReadLine();
        }
    }

运行结果

将字段改为属性代码

 public class A
    {
        public  string Type
        {
            get { return "Type A"; }
        }
        public virtual string Show()
        {
            return "Show " + Type;
        }
    }
    public class B : A
    {
        public   string Type
        {
            get { return "Type B"; }
        }
        public override string Show()
        {
            return "Show " + Type;
        }
    }

运行结果

 

 

把父类的属性改为virtual 子类override该属性

代码:

  public class A
    {
        public virtual  string Type
        {
            get { return "Type A"; }
        }
        public virtual string Show()
        {
            return "Show " + Type;
        }
    }
    public class B : A
    {
        public override   string Type
        {
            get { return "Type B"; }
        }
        public override string Show()
        {
            return "Show " + Type;
        }
    }

运行结果

我们可以总结一个 结论:

对象方法的调用 取决于对象的实例,也就是说创建的是子类就调用子类的方法

而字段这是和属性则是就近原则,一般情况是读取对象引用类型的字段和属性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值