继承学习一

列表内容

实现继承和接口继承
● 实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数;
● 接口继承;表示一个类型只继承了函数的签名,没有继承任何实现代码;

多重继承
● c#不支持多重实现继承,支持多重接口继承,即C#允许类型派生自多个接口。

结构和类
结构不支持实现继承,但支持接口继承。定义接口和类可以总结为:
● 结构总是派生自System.ValueType,他们还可以派生自任意多接口。
● 类总是派生自System.Object或用户选择的另一个类,他们还可以派生自任意多个接口。

虚方法
把一个基类函数声明为virtual,就可以在任何派生类中重写该函数:

public  class  MyVirtualClass
    {
        //虚方法   关键字virtual
        public virtual void VirtualMethod()
        {
            Console.WriteLine("这是一个虚方法");
        }
    }

属性也可以声明为virtual
在派生类中重写另一个方法时应使用overrride关键字显式声明

 public  class  MyVirtualClass
    {
        //虚方法   关键字virtual
        public virtual void VirtualMethod()
        {
            Console.WriteLine("这是一个虚方法");
        }
    }

    public class MyOverrideClass:MyVirtualClass
    {
        public override void VirtualMethod()
        {
            Console.WriteLine("这里重写了虚方法");
        }
    }   
    class Program
    {
        static void Main(string[] args)
        {
            MyVirtualClass a = new MyVirtualClass();
            MyVirtualClass b = new MyOverrideClass();
            MyOverrideClass c = new MyOverrideClass();
            a.VirtualMethod();      //输出  "这是一个虚方法 "  
            b.VirtualMethod();      //输出  "这里重写了虚方法 "    
            c.VirtualMethod();      //输出  "这里重写了虚方法 "  
            Console.ReadKey();
        }
    }

成员字段和静态函数都不能声明为virtual,因为这个概念只对类中的实例函数成员有意义。

隐藏方法
如果签名(ps:方法的签名包括方法的签名包括方法的名称,参数的数目,参数的数据类型和顺序,参数修饰符。常见错误:返回类型和形参的名称并不是签名的一部分)相同的方法在在基类和派生类中都进行了声明,但该方法没有声明为virtual和override,派生类方法会自动隐藏基类方法。
但在编译代码时,程序在应该调用那个方法上会有潜在的冲突,编译时系统会发出警告。在C#中,要隐藏一个方法应使用new关键字声明。如下所示

public class HisBaseClass
    {
        public void MyGroovyMethod()
        {
            Console.WriteLine(0);
        }
    }
    public class MyDerivedClass : HisBaseClass
    {

        public new void MyGroovyMethod()
        {
            Console.WriteLine(1);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

            HisBaseClass a = new MyDerivedClass();
            MyDerivedClass b = new MyDerivedClass();
            a.MyGroovyMethod();         //输出    0
            b.MyGroovyMethod();         //输出    1
            Console.ReadKey();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值