C#中多态、重载、重写区别分析

本文实例总结了C#中多态、重载与重写的概念与区别。对于初学C#的朋友来说有不错的参考价值。分享给大家供大家参考。具体分析如下:


重写

是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override

格式如下:

1.在基类中:

public virtual void myMethod()
{
}

2.在子类中:

public override void myMethod()
{
}

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


重载:

用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用

public void test(int x,int y){}
public void test(int x,ref int y){}
public void test(int x,int y,string a){}


重载的特征:

I.

方法名必须相同

II.

参数列表必须不相同,与参数列表的顺序无关

III.

返回值类型可以不相同


但如果有泛型,就要注意了!


多态:

c#的多态性主要体现在类的继承上

:

子类继承父类的时候,可能出现同名但方法定义不同的情况,

所以在子类中会将原方法覆盖,实现自身的要求.


需要注意的地方有两点:

①.可以在子类中被重写的方法一定要被标记成virtual(虚拟), abstract(抽象), override(重写)标记为virtual 和abstract 的函数就是为了重写而创建的,标记为override的函数本身是由前两种函数重写而来的,所以它可以被重写也是顺理成章的了;

②.重写的函数必须在子类中出现,而且任何一个父类的函数在其一个子类中只能被重写一次。(这一点很好理解,当你要重写两次时,该子类中将定义两个返回类型,方法名称 和参数列表都相同的函数,这肯定是不可能的)。

相信本文所述对大家C#程序设计的学习有一定的参考借鉴价值。

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#中多态、重载、重写区别分析

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23494.html

相关内容

.NET WinForm实现在listview中添加progressbar的方法

C# Rx的主要接口深入理解

c#动态类型,及动态对象的创建,合并2个对象,map实例

c# 应用NPOI获取Excel中的图片,保存至本地的算法


C# DateTime.ToString根据不同语言生成相应的时间格式

理解C#中的Lambda表达式

C#从字符串中指定位置移除子字符串的方法

C#生成code128条形码的方法

时间: 2024-10-11 11:21:51

C#中多态、重载、重写区别分析的相关文章

PHP中spl_autoload_register()和__autoload()区别分析

关于spl_autoload_register()和__autoload(),相信大多数都会选择前者了? 看两者的用法:代码如下: //__autoload用法 function __autoload($classname) { $filename = "./class/".$classname.".class.php"; if (is_file($filename)) { include $filename; } } //spl_autoload_register

C++重载重写和多态区别

1.重载和重写的区别: 重载overload:在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态. 重写override:也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是private的,子类中重写函数改为public,protected也可以,体现了多态. 重定义redefining

java中的重载(overload)和重写(override)区别

方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同定义,调用方法时通过传递给他们的不同参数个数和参数列表决定具体使用     哪        个方法,这就是多态性,重载的时候方法名一样,参数类型和个数不一样,返回值烈性可以相同可以不同,可以有不同的访问修饰符,可以抛出不同的异常. 例子: package com.test.entity; public class Dog { Dog() { this.bark(); } void

java实现多态 方法的重写和重载的区别

1.方法的重写 思路:先写一个父类People,在类中定义一个 print方法 ,然后写一个子类 Student 继承父类,重写print方法. //父类 class People{ public void print(){ System.out.println("这是父类的print方法!"); } } //子类 继承父类 class Student extends People{ public void print(){ System.out.println("这是子类的

C++基础6 【继承】 类型兼容 satatic 多继承 虚继承 【多态】 案例 虚析构函数 重载重写重定义

[继承] 继承的访问控制域 图 类型兼容性原则  指针 与 引用 用子类直接初始化父类 类的继承模型示意 图 [继承结论] [非常重要的概念] 继承与组合混搭情况下,构造和析构调用原则 原则:先构造父类,再构造成员变量.最后构造自己 先析构自己,在析构成员变量.最后析构父类 继承中,同名的成员变量的处理办法 继承中,同名的成员函数的处理办法 派生类中的static关键字 如果静态成员变量,你没有使用,也没有初始化的话 编译不会报错 经典错误 : 类中函数默认是private的,无法在外部访问 具

asp.net中virtual和abstract的区别分析

这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考.具体分析如下: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况:情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例

从虚拟机指令执行的角度分析JAVA中多态的实现原理

从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧,隐隐约约地记得是与Class文件格式中的方法表有关,但是不知道虚拟机在执行的时候,是如何选择正确的方法来执行的了.so,趁着周末,把压箱底的<深入理解Java虚拟机>拿出来,重新看了下第6.7.8章中的内容,梳理一下:从我们用开发工具(Intellij 或者Eclipse)写的 .java 源程

JAVA SE中方法重载和方法重写及数据库中子程序的重载

首先方法重写和方法重载是建立在Java的面向对象的继承和多态的特性基础上而出现的.至于面向对象的继承和多态的特性我就不在这里多说了.继承是指在一个父类的基础再创建一个子类,这样子类就拥有了父类的非私有的特性,同时子类还可以扩展自己的特性,这样就引出了方法重写和方法重载! 一.方法重写(Override)         在Java中如何来定义重写:Java程序中类的继承特性可以产生一个子类,子类继承父类就拥有了父类的非私有的属性(方法和变量),在子类中可以增加自己的属性(方法和变量),同时也可以

重写和重载的区别

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同.无法以返回型别作为重载函数的区分标准. 下