C#重载--重写

痴心易碎 提交于 2020-02-04 06:32:26

     重载

C#中同一个类不可以有两个相同的方法(方法名、参数类型、参数个数和参数位置都 相同)。但可以有方法名相同,参数不同(参数类型、参数个数和参数位置不相同)的方法。这 种相同的方法名,参数不同的方法称为重载。

  决定方法是否构成重载有以下几个条件:

  ◆ 在同一个类中;

  ◆ 方法名相同;

  ◆ 参数列表不同。

例如下面的代码:

       public void Show()//(1)
        {
            Console.WriteLine("Nothing");
        }
        public void Show(int number)//(2)
        {
            Console.WriteLine(number);
        }
        /*
        public int Show(int number)//(3)
        {
            Console.WriteLine(number);
            return number % 5;
        }
        */

对 于上面的代码,(1)没有参数,(2)使用了一个int类型的参数,(1)和(2)之间就构成了重载。(2)与(3)相比仅仅返回值不同,虽然重载不关心 返回值的不同,但是在C#中不允许存在方法名和参数列表相同、返回值不同的方法,所以(2)和(3)不能同时存在于代码中,(3)如果不注释掉上面的代码 是没有办法通过编译的。

 

 

重写

      通过为声明的方法提供新的实现,派生类可以重写基类的方法。并且基类中的这个方法必须标记为虚方法(virtual),Java 和 C# 之间的一个重要区别在于,Java 方法在默认情   况下标记为虚方法,而在 C# 中,必须使用 virtual 修饰符才能将方法显式标记为虚方法。可以采用大致相同的方式重写属性访问器以及方法。

  • 不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。为什么 override 也可以重写呢?因为基类中的 override 实际上是对基类的基类进行的重写,由于继承可传递,所以也可以对基类中 override 的方法进行重写。
  • override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。
  • 不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。
  • 重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。
public class employee
{
    public virtual deemal Pay()
    {
        return "这是一个虚方法。";
    }
}


public class progeammer: BaseClass
{
    public override string Pay()
    {
        return "这是重写了的方法。";
    }
}比方上面的列子,有一个雇员的基类,其中有个虚函数薪资,程序员这个类继承了雇员这个基类,同时重写了薪资这个方法。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!