C#中多态与重载的区别

如题所述

重载:

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

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的函数本身是由前两种函数重写而来的,所以它可以被重写也是顺理成章的了;重写的函数必须在子类中出现,而且任何一个父类的函数在其一个子类中只能被重写一次。(这一点很好理解,当你要重写两次时,该子类中将定义两个返回类型,方法名称 和参数列表都相同的函数,这肯定是不可能的)。
所以如果在父类中定义了一个方法habit(),重载讲述的是父亲本人习惯的事,例如爱抽烟爱喝酒等等,但是重写则讲述的是儿子继承父亲习惯的问题,例如父亲抽的是大前门,儿子抽的是中南海,父亲喝的是二锅头,儿子喝得是剑南春了
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-18
这个没有可比较性。重载是多态的一种。
多态的形式有:
覆盖:输入参数一样,但对于不同的派生类有不同的实现, 其多态体现在运行阶段,也就是一个父类的指针可以指向不同的派生类对象,调用不同的同名函数。
重载:类的成员函数里,允许有多个不同参数的同名函数,其多态性体现在编译阶段.
第2个回答  2013-09-18
楼上说的有道理
重载是多态的一种,是一种特殊的多态
你的问题就像问:男人和人的区别

C#中多态与重载的区别
重载发生在同一个类中;重载主要是针对同一个类中方法名相同但参数(必须的)不同或返回类型(不是必须的)不同的情况。可以参照如下的代码 class OverLoadTest { public void Hello(){ } public void Hello(string str){ } public string Hello(){ } } 在这段代码中有三个具有相同名称的方法H...

C#中多态,重载,重写的区别
多态是一种概念,也是一种思想 重载,重写只是多态的体现。重载简言之是方法名相同,但是方法的参数不同 重载一般发生在同一个类里。重写顾名思义,是重新设计了方法的实现,这个“重新设计”的的基础是方法名和参数完全一致,但是内部实现体不一样。重写一般发生在父类和子类之间,一般父类定义一个虚...

什么是多态和重载?
而重载(Overload),是指允许存在多个同名函数,而这些函数的签名也叫参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于...

C#中的构造函数、方法重载以及继承与多态详细讲解
方法重载就是同一个功能函可能无参数、一或多参数,一般是用在写功能函数的时候。多态简单的说,可以分为重载和重写,就是同一个方法在不同的类中有不同的实现体。比如说吃,狼吃羊、羊吃草,不同的类(狼、羊)进行同一方法吃,有不同的实现体(狼吃羊羊吃草)。另外从另一方式上来说多态可...

C#简述override和overload的区别
方法的重写overriding和重载overloading是java多态性的不同表现。重写overriding是父类与子类之间多态性的一种表现,重载overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它...

什么是静态多态性?它和重载有何不同?
C++允许在参数类型不同的前提下重载函数。重载的函数与具有多态性的函数(即虚函数)不同处在于:调用正确的被重载函数实体是在编译期间就被决定了的;而对于具有多态性的函数来说,是通过运行期间的动态绑定来调用我们想调用的那个函数实体。多态性是通过重定义(或重写)这种方式达成的。请不要被重载(...

C# 中的重写与多态性
C 语言就是这样设计的 abstract 抽象方法 子类必须实现这个方法,否则不能被实例化 virtual 虚方法 允许派生类(子类)改写基类(父类)的方法,改写后就调用自己的,当然不改写也可以,那么调用的就是父类的。当父类的方法不能完全满足所有的情况,需要在子类中补允时(增加或减少一些调用,或者完全...

c#什么是多态性,用多态的作用是什么?请举例说明,谢谢
您好,多态的含义就是C#中允许多个方法的方法名相同,只要它们的方法签名不同就可以。这里有两个概念,方法名是方法的一部分,例如一个方法:public static void hello(int a, int b)在这个方法中,hello被称为方法名。方法签名指的是方法名和方法参数列表的构造,同样对于上面的方法,它的方法签名是...

C# 重载与重写的区别
任何类中的方法都可以重载,重载后的方法实际上是不同的方法,只是他们的名称相同罢了.重写只能是子类override父类中的虚方法,他们是完全相同的方法,重写之后子类中的方法是新版本,父类中被override的方法是旧版本,默认的都是调用新版本的方法

怎么来理解c#多态性,举个简单的例子吧
多态的定义:同一消息可以根据发送对象的不同而采用多种不同的行为方式。多态的作用:消除类型之间的耦合关系。实例:public abstract class Operation{ public abstract decimal GetResult(decimal va, decimal vb);}public class OperationAdd : Operation{ public override decimal GetResult(decimal v...

相似回答