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的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...
随机推荐
- EasyUI汇总
easyui combobox添加清除选项按钮 <input class="easyui-combobox" name="appType" data-op ...
- selenium+python自动化81-html报告优化(饼图+失败重跑+兼容python2&3)
优化html报告 为了满足小伙伴的各种变态需求,为了装逼提升逼格,为了让报告更加高大上,测试报告做了以下优化: 测试报告中文显示,优化一些断言失败正文乱码问题 新增错误和失败截图,展示到html报告里 ...
- 好记性不如烂笔头-linux学习笔记4apache相关知识
apache 启动有2种模式 1是prefork模式,每个进程对应一个线程,如果是比较稳定的平台,那么prefork模式是worker模式 比较好,效率高,但是吃的内存比较大. 2 如果是高负载高并发 ...
- spring quartz 配置及说明
方式一,jobDetail的bean利用MethodInvokingJobDetailFactoryBean 工厂包装 : ()定义一个bean,执行具体的业务操作. <bean id=&quo ...
- leetcode861
public class Solution { public int MatrixScore(int[][] A) { ); ].GetLength(); //判断最高位是否为1 ; i < r ...
- BURG For Ubuntu 14.04 Trusty
sudo add-apt-repository ppa:n-muench/burg sudo apt-get updatesudo apt-get install burg burg-themes D ...
- 使用 phpStorm 开发
苦恼蛋疼的曾哥工作室,让人痛不欲生,缓慢的同步速度,另人恼火的插件配置,让人疯狂的卡.简直是让人用了几天之后就不行了. 废话不多说,一款很好的php IDE. 1. phpStorm 下载 here ...
- 数据挖掘模型中的IV和WOE详解
IV: 某个特征中 某个小分组的 响应比例与未响应比例之差 乘以 响应比例与未响应比例的比值取对数 数据挖掘模型中的IV和WOE详解 http://blog.csdn.net/kevin7658/ar ...
- Motion Blur
[Motion Blur] 此篇介绍最简单的全局Motion Blur.算法是将当前帧与前一帧按某一比例混合.这是一个过程,例如有10帧,在第1帧中,只有第1帧原图,第2帧中有1.2帧原图,第3帧中会 ...
- Five reasons phosphorene may be a new wonder material
A material that you may never have heard of could be paving the way for a new electronic revolution. ...