美文网首页
c#中的重载和重写区别

c#中的重载和重写区别

作者: 流源z | 来源:发表于2016-04-26 13:55 被阅读193次

  重载的条件:

          1.必须在同一个类中2.方法名必须相同3.参数列表不能相同。

   重写的条件:

          1. 在不同的类中

          2. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致

          3. 子类抛出的异常不能超过父类相应的方法抛出的异常

          4. 子类方法的访问级别不能低于父类相应方法的访问级别(public,package,protected, private)

          5.方法体不同

super()调用父类构造,super.只能调用父类的实例方法

this()调用该类的其他构造方法,this.调用类的属性,方法

如果父类有有参构造,子类必须定义构造方法

重载:

       重载发生在同一个类中;重载主要是针对同一个类中方法名相同但参数(必须的)不同或返回类型(不是必须的)不同的情况。可以参照如下的代码

class OverLoadTest

    {

        public void Hello()

        {

        }

        public void Hello(string str)

        {

        }

        public string Hello()

        {

        }

    }

在这段代码中有三个具有相同名称的方法Hello,他们彼此之间是重载的关系,注意两点:他们共同存在于一个类中,虽有同样的名字但是执行不同的操作;第一个方法和第三个方法只有返回类型不同,这在C# 中是不允许的,编译器会报出“已定义一个名为"Hello"的方法”的错误。

重写:

      重写发生在有继承关系的类之间

      重写发生在派生类上,通过override关键字来改写从其父类继承过来的具有相同返回值,方法名称和参数列表的方法。

    class Program

    {

        static void Main(string[] args)

        {

            OverWriteTestTT owTT = new OverWriteTestTT();

            owTT.Hello();

            overWriteTestTTT owTTT = new overWriteTestTTT();

            owTTT.Hello();

        }

    }

    class OverWriteTest

    {

        //Over write the method ToString();

        public override string ToString()

        {

            return "hello world";

        }

        //Define a virtual method Hello() to be over written

        public virtual void Hello()

        {

            Console.WriteLine("hello");

        }

    }

    class OverWriteTestTT : OverWriteTest

    {

        public override void Hello()

        {

            Console.WriteLine("No hello world");

        }

    }

    class overWriteTestTTT : OverWriteTestTT

    {

        //Over write the method Hello() of class OverWriteTestTT

        public override void Hello()

        {

            base.Hello();

            Console.WriteLine("NNo hello world");

        }

    }

上面这段代码演示了如何对父类的方法进行重写,需要注意的地方有两点:可以在子类中被重写的方法一定要被标记成virtual(虚拟), abstract(抽象), override(重写)标记为virtual 和abstract 的函数就是为了重写而创建的,标记为override的函数本身是由前两种函数重写而来的,所以它可以被重写也是顺理成章的了;重写的函数必须在子类中出现,而且任何一个父类的函数在其一个子类中只能被重写一次。(这一点很好理解,当你要重写两次时,该子类中将定义两个返回类型,方法名称 和参数列表都相同的函数,这肯定是不可能的)。

相关文章

  • Unity 面试题汇总(一)

    C#语言基础 1.重载和重写的区别 1) 封装、继承、多态所处位置不同,重载在同类中,重写在父子类中。 ...

  • c#中的重载和重写区别

    重载的条件: 1.必须在同一个类中2.方法名必须相同3.参数列表不能相同。 重写的条件: 1. 在不同的类中 ...

  • 02.Java面向对象问题

    目录介绍 2.0.0.1 重载和重写的区别?重载和重写绑定机制有何区别?父类的静态方法能否被子类重写? 2.0.0...

  • 【C#】重写和重载的区别

    导读:学习C#的时候,其实没想那么多的。就想着把视频看完,把例子做一下就好了,其实真心不懂那些玩意儿是什么,就好像...

  • 方法重载与方法重写(@Overload @Override)

    java方法重载和方法重写(方法覆盖)的区别: 方法重载: Overload 方法重写: Override 批判,...

  • 5.Java重载和重写的区别

    Java 方法重载和方法重写的区别有哪些? 解析:先明白重载和重写的定义。 一、方法重写(0verride) 在J...

  • Java中重载和覆盖(重写)的区别

    Java中重载和覆盖(重写)的区别 1,基本概念 重载(Overload) Java中的方法重载发生在同一个类里面...

  • 2020-07-07-《C++虚函数》

    虚函数可以让子类重写函数 子类重写父类中的虚函数 重写与重载的区别?

  • JAVA方法重载与方法重写辨析

    一、重载(overload)和重写(override)的区别?重载的方法能否根据返回类型进行区分? 方法的重载和重...

  • JAVA中重写和重载区别

    重写和重载区别 重写方法的规则如下: 参数列表:必须与被重写方法的参数列表完全匹配。 返回类型:必须与超类中被重写...

网友评论

      本文标题:c#中的重载和重写区别

      本文链接:https://www.haomeiwen.com/subject/vupqrttx.html