C# 重写和重载

已迁移至本人博客

首先分别建立三个类,分别为person,man,women

其中person为父类,man继承person,women继承man

virtual用法:

1. 在父类中定义virtual方法,但在子类中没有override该方法,则子类调用父类该方法时输出父类方法的值。

2.在父类中定义virtual方法,在子类中override该方法,则子类调用父类该方法时输出子类重写父类方法的值。

 

重写

class Person
    {
        public virtual void Say()
        {
            Console.WriteLine("我是你爸爸");
        }
    }

class Man:Person
    {
        public override void Say()
        {
            base.Say();
            Console.WriteLine("我是你儿子");
        }
    }

class women:Man
    {
        public override void Say()
        {
            //base.Say();
            Console.WriteLine("我是你女儿");
        }
    }

base.Say();是用于重写时同时输出父类方法的值

在主程序中实例化

//输出(我是你爸爸)
person p=new person();
p.Say();

//父类实例化子类,会输出子类中的值,不能用子类去实例化父类,
//若在重写的方法中加入base,则会在实例化的子类中同时输出父类方法和子类方法的值
person p=new man();//我是你儿子
person p1=new women();//我是你女儿
man m=new women();//我是你女儿

重载:同名不同参数或参数类型

class Man:Person
    {
        public override void Say()
        {
            base.Say();
            Console.WriteLine("我是你儿子");
        }

        public virtual void Say(string s)
        {
            Console.WriteLine(s);
        }
    }

用virtual关键字,在子类women中则可重写Say(string s)

Man m = new Man();
m.Say("2");

 

abstract:可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的父类,不能实例化,而且abstract修饰的成员在子类中必须全部实现,不允许部分实现,否则编译异常. 

abstract class Person
{
    public virtual void Say()
    {
        Console.WriteLine("我是你爸爸");
    }

    public abstract void Apple();
}

class Man:Person
{
   public override void Apple()
   {
       Console.Write("abstract");
   }
}

Man m = new Man();
m.Apple();//输出abstract

父类person采用abstract关键字,定义apple方法,在子类man中必须override该方法,且person类无法实例化。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值