重写 覆盖 重载

   在敲例子的时候,我们经常会需要这个的错误提示:没有找到适合的方法来重写。。那么重写是什么?他和覆盖又有什么区别呢?


重写(override):

概念:重写是重写基类的方法,把父类中的方法变成我们更需要的。在基类的方法中必须要有virtual修饰符(用virtual修饰的方法叫虚方法),而在之类的方法中必须要有override。

格式:

   基类中:       
<span style="font-size:18px;"><strong>public virtual void myMethod()
{
}
</strong></span>
     
    子类中:
<span style="font-size:18px;"><strong>public override void myMethod()
{
}</strong></span>

   重写以后,用基类和子类对象访问myMethod()方法,结果都是访问在子类中重新定义的方法,基类的方法相当于被覆盖掉了。

例如:
<span style="font-size:18px;"><strong>public class A1
{
    public virtual string GetName()
    {
        return "LIFEN";
    }
}

public class A2 : A1
{
    public override string GetName()
    {
        return "李芬";
    }
}

 A1 a1 = new A1();
 Console.WriteLine(c1.GetName());//输出“LIFEN”

 A2 a2 = new A2();
 Console.WriteLine(a2.GetName());//输出“李芬”

 A1 a3 = new A2();
 Console.WriteLine(a3.GetName());//输出“李芬” 
</strong></span>

覆盖:


概念:在子类中用关键字new来修饰的,与父类中同名的方法,叫做覆盖。覆盖不会改变父类方法中的功能。
<span style="font-size:18px;"><strong>public class A1
{
    public  string GetName()
    {
        return "LIFEN";
    }
}

public class A2 : A1
{
    public new string GetName()
    {
        return "李芬";
    }
}

 A1 a1 = new A1();
 Console.WriteLine(c1.GetName());//输出“LIFEN”

 A2 a2 = new A2();
 Console.WriteLine(a2.GetName());//输出“李芬”

 A1 a3 = new A2();
 Console.WriteLine(a3.GetName());//输出“LIFEN” 
</strong></span>

重载:                                                                

概念:重载指的是同一个类中有俩个或多个名字相同但是参数不同或者是返回值不同的方法,重载没有关键字。如下:

<span style="font-size:18px;"><strong>int  eat()
int  eat(int a)</strong></span>

区别:

      重写发生在基类和派生类中,基类用virtual修饰,派生类用override修饰。

      覆盖在之类中写一个和基类一样的名字的非虚函数,但是要求new是关键字   

      重载是在一个类中,函数名相同,但是参数类型构成重载。



       
       


       

   








    





  


    




评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值