C# 中多态和重载的区别
一、多态性意味着有多重形式。
在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace PolymorphismApplication
{
/// <summary>
/// 几何图形,抽象基类
/// </summary>
abstract class Geometric
{
public abstract double Area();
} /// <summary>
/// 正方形
/// </summary>
class Square : Geometric
{
private double side;
public Square(double a = )
{
side = a;
}
public override double Area()
{
Console.WriteLine("Square 类的面积:");
return (side * side);
}
}
/// <summary>
/// 长方形
/// </summary>
class Rectangle : Geometric
{
private double length;
private double width;
public Rectangle(double a = , double b = )
{
length = a;
width = b;
}
public override double Area()
{
Console.WriteLine("Rectangle 类的面积:");
return (width * length);
}
}
/// <summary>
/// 圆型
/// </summary>
class Circle : Geometric
{
private double r;
public Circle(double a = )
{
r = a;
}
public override double Area()
{
Console.WriteLine("Circle 类的面积:");
return (3.14*r*r);
}
} class Program
{
static void Main(string[] args)
{
Square s = new Square();
double sa = s.Area();
Console.WriteLine("面积: {0}", sa);
Rectangle r = new Rectangle(, );
double ra = r.Area();
Console.WriteLine("面积: {0}", ra);
Circle c = new Circle();
double ca = c.Area();
Console.WriteLine("面积: {0}", ca);
Console.ReadKey();
}
}
}
抽象基类Geometric中定义了抽象方法Area public abstract double Area();
不同的子类继承了基类Geometric,分别实现了Area(),但是正方形和长方形和圆型的Area()又不相同。这就是多态性。
二、重载
重载是指具有相同的函数名词,但是参数类型,个数不相同。
举个例子
编程实现两个整数相加
public static int IntPlusInt(int a, int b)
{
return a + b;
}
没有问题,再写个double类型和double类型相加
public static double DoublePlusDouble(double a, double b)
{
return a + b;
}
doub 和int相加:
public static double DoublePlusInt(double a, int b)
{
return a + b;
} public static double IntPlusDouble(int a, double b)
{
return a + b;
}
就这样,简单的int和double类型的相加就需要4个方法。
你在计算时还得想一下,int类型相加的方法名称是什么。
重载,可以使得上面的事情变得简单:
public static int Plus(int a, int b)
{
return a + b;
} public static double Plus(double a, double b)
{
return a + b;
} public static double Plus(double a, int b)
{
return a + b;
} public static double Plus(int a, double b)
{
return a + b;
}
方法名称全都是Plus,不需要起很多名字,方便使用。调用时,vs会根据变量类型自动匹配到相应的方法。
附全部代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Overload
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("1+2=" + IntPlusInt(, ));
Console.WriteLine("1.1+2.2=" + DoublePlusDouble(1.1, 2.2));
Console.WriteLine("1.1+2=" + DoublePlusInt(1.1, ));
Console.WriteLine("1+2.2=" + IntPlusDouble(, 2.2)); Console.WriteLine("1+2=" + Plus(, ));
Console.WriteLine("1.1+2.2=" + Plus(1.1, 2.2));
Console.WriteLine("1.1+2=" + Plus(1.1, ));
Console.WriteLine("1+2.2=" + Plus(, 2.2)); Console.ReadKey();
} #region 不使用重载
public static int IntPlusInt(int a, int b)
{
return a + b;
} public static double DoublePlusDouble(double a, double b)
{
return a + b;
} public static double DoublePlusInt(double a, int b)
{
return a + b;
} public static double IntPlusDouble(int a, double b)
{
return a + b;
}
#endregion #region 使用重载
public static int Plus(int a, int b)
{
return a + b;
} public static double Plus(double a, double b)
{
return a + b;
} public static double Plus(double a, int b)
{
return a + b;
} public static double Plus(int a, double b)
{
return a + b;
}
#endregion
}
}
C# 中多态和重载的区别的更多相关文章
- Java中重写与重载的区别
方法重载:关键字overload,方法名和方法的返回类型都相同,方法参数个数和类型不一样方法重写:也叫方法覆盖,关键字override,相对于类继承而言,重写的方法名,返回类型,参数个数,参数类型都要 ...
- 浅谈Java中重写与重载的区别
重载和重写是Java中两个截然不同的概念.但是却因为名字相近导致很多人经常混淆. 下面用例子展示出他们之间的区别. 在Java中,重载(overloading) 发生在本类.方法名相同,参数列表不同, ...
- C#中区别多态、重载、重写的概念和语法结构
C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...
- C#中区别多态、重载、重写
重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual void myMethod() { } 子 ...
- 2017.10.10 java中的继承与多态(重载与重写的区别)
1. 类的继承 继承是面向对象编程技术的主要特征之一,也是实现软件复用的重要手段,使用继承特性子类(subclass) 可以继承父类(superclass)中private方法和属性,继承的目的是使程 ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- [转帖]Java中重写和重载与多态的关系
Java中重写和重载与多态的关系 2019-09-05 00:57:41 留下一天今天 阅读数 67 收藏 更多 分类专栏: java进阶之路 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?重写跟重载的区别?
java中的方法重载发生在同一个类里面两个或者多个方法的方法名相同但是参数不同的情况.与此相对,方法覆盖是说子类重新定义了父类的方法.方法覆盖必须有相同的方法名,参数列表和返回类型. 覆盖者可能不会限 ...
- asp.net中virtual和abstract的区别
这篇文章主要介绍了asp.net中virtual和abstract的区别,较为详细的分析了virtual与abstract的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...
随机推荐
- C语言指针的一些题目
1.将从键盘输入的每个单词的第一个字母转换成大写字母输入时各单词以空格隔开,用“.”结束输入 解体思路: 把输入的字符存入字符数组中直到输入".",然后调用函数,把字符串的第一个 ...
- Selenium2+python自动化63-简易项目搭建
前言 到unittest这里基本上可以搭建一个简易的项目框架了,我们可以用一条run_main.py脚本去控制执行所有的用例,并生成报告,发送邮件一系列的动作 一.新建工程 1.打开pycharm左上 ...
- 检测Python程序的执行效率
无意中被问到代码执行效率的问题,那就总结一下检测代码执行效率的几种方式: 一.装饰器 在函数上加装饰器,来得到函数的执行时间. def cst_time(func, *args, **kwargs): ...
- @JsonIgnore的源码说明
@JsonIgnore不仅仅是在getter上有影响,也对setter方法有影响: 所在包:com.fasterxml.jackson.annotation; 源码: import java.lang ...
- email 解析 ,发送 邮件
email 来源:https://blog.csdn.net/xyang81/article/details/7675160 详见此人其它mail 篇 参考2:http://lib.csdn. ...
- Tessnet2 a .NET 2.0 Open Source OCR assembly using Tesseract engine
http://www.pixel-technology.com/freeware/tessnet2/ Tessnet2 a .NET 2.0 Open Source OCR assembly usin ...
- delphi Firemonkey ListView 使用参考
delphi Firemonkey ListView 使用参考 Tokyo版本 http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Customizin ...
- 迷你MVVM框架 avalonjs 0.98发布
在本版本中,avalon侧重于对组件开发的支持,可用控件达到12个,末来将大力投入对GRID,TREE等重型UI的开发中. 添加ms-widget绑定,废弃ms-ui绑定 为ms-include添加跨 ...
- swagger2 注解整体说明
@Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置&q ...
- codeforces:855D Rowena Ravenclaw's Diadem分析和实现
题目大意: 提供n个对象,分别编号为1,...,n.每个对象都可能是某个编号小于自己的对象的特例或是成分.认为某个对象的特例的特例依旧是该对象的特例,即特例关系传递,同样一个对象的成分的成分依旧是该对 ...