C#中使用派生类更改基类的数据和行为

这篇东西主要是为了了解C#中使用派生类更改基类的数据和行为,C#提供两种方法:一是使用new的派生成员替换基成员;二是重写虚拟的基成员(Override和Virtual)。还有介绍实现了类的接口强制转换为接口的时候,转换后还是能调用类中定义好的接口。直接看代码:

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test6
{
    class Program
    {


        static void Main(string[] args)
        {
            B b = new B();
            A a = new A();
            //在1和2,由于B类只是用了new来替换A类中的AA()方法,这种方式不是继
            //承多态性,b在强制转化为A类时调用AA(),是调用基类A的方法,而不是
            //b用new替换A类中的AA()方法。
            //而3和4,用的是virtual和override来实现继承多态性,所以这种方式既
            //使把b强制转化为A类时调用AA(),也是b类中覆盖的AA()方法
            Console.WriteLine("直接从B类中调用b.AA():");//1
            b.AA();
            Console.WriteLine("直接从B类中调用((A)b).AA():");//2
            ((A)b).AA();
            Console.WriteLine("直接从B类中调用b.AAA():");//3
            b.AAA();
            Console.WriteLine("直接从B类中调用((A)b).AAA():");//4
            ((A)b).AAA();

            //这个说明类即使是强制转化了接口也不会掉失实现接口内容。
            //如:A类中实现了接口A并要输出一定的内容,但是继承A类的B类转换为接口
            //Inter的时候,还是能实现A类定义了接口Inter中的内容,即((Inter)b).InterA()。
            Console.WriteLine("直接从B类中调用b.InterA():");
            b.InterA();
            Console.WriteLine("直接从B类中调用((Inter)b).InterA():");
            ((Inter)b).InterA();
            Console.WriteLine("结束.....");
            Console.ReadKey();
        }
    }

    interface Inter
    {
        void InterA();
    }

    class A : Inter
    {
        public A()
        {
        }

        public void AA()
        {
            Console.WriteLine("我是基类A的AA()方法\n");
        }

        public virtual void AAA()
        {
            Console.WriteLine("我是基类A的AAA()方法,实现了Virtual\n");
        }

        public void InterA()
        {
            Console.WriteLine("我是基类A,实现了接口Inter\n");
        }

    }

    class B : A
    {
        public B()
        {
        }

        public new void AA()
        {
            Console.WriteLine("我是B类中用new来替换基类的AA()方法,但这不是继承的多态性\n");
        }

        public override void AAA()
        {
            Console.WriteLine("我是B类中用override来替换基类的AAA()方法,这是继承的多态性\n");
        }
    }
}

转载于:https://my.oschina.net/swords/blog/120725

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值