黑马程序员-- 继承

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

 

C#支持class继承和接口继承,且支持class单继承,interface多继承,而由于interface中不能有任何实现代码,所以只是继承了函数签名。
结构不支持继承,但结构可以派生自一个或多个接口,Class可以派生自一个类和多个接口,接口可以派生自一个或者多个接口。
结构总是派生字System.ValueType,类总是派生字System.Object,一下是一个继承的例子:

    class Person
 
    {
        public void Eat()
 
        {
 
            Console.WriteLine("只要是个人,就都会吃东西...");
 
        }
 
    }
 
    class Man:Person
 
    {
 
        public void Mark()
 
        {
 
            Console.WriteLine("这个是男人");
 
        }
 
    }
 
    class Woman:Person
 
    {
 
        public void Mark()
 
        {
 
            Console.WriteLine("这个是女人");
 
        }
 
    }

在上面的例子中,Woman和Man都继承自Person,由于class总是继承自System.Object,所以Person省略了“:Object”

如若把一个方法用virtual关键字修饰,则该方法就是虚方法,可以在任何派生类中重写该方法,当然也可以有虚属性,例如:

    class BaseClass
 
    {
 
        public virtual void Say()
 
        {
 
            Console.WriteLine( "这是基类中的虚方法");       
 
        }
 
        private string str;
 
        public virtual string Str
 
        {
 
            get;
 
            set;
 
        }
 
    }
 
    class Class:BaseClass
 
    {
 
        public override void Say()
 
        {
 
            Console.WriteLine("这是派生类中的方法");
 
        }
 
    }

由上例中可以看到,重写方法用override关键字,但不能将其用于字段和static函数
PS:1.重写之后会默认调用重写之后的方法。2.虚方法不能私有

如若在基类和派生类中都申明了相同签名的方法,切不是virtual和override,派生类中的方法会隐藏基类中的方法,如:(可以用new关键字,不然会有警告)

    class BaseClass
 
    {
 
        public  void Say()
 
        {
 
            Console.WriteLine( "这是基类中的方法");       
 
        }
 
    }
 
    class Class:BaseClass
 
    {
 
        public new void Say()
 
        {
 
            Console.WriteLine("这是派生类中的方法");
 
        }
 
    }

但若实例化子类给父类的时候,父类会找不到子类中的同名方法。这点须特别注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值