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的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...
随机推荐
- canvas设置阴影
canvas设置阴影 属性 shadowOffsetX = float 阴影向右偏移量 shadowOffsetY = float 阴影向下偏移量 shadowBlur = float 阴影模糊效果 ...
- 浅析JavaScript中的typeof运算符
对JavaScript中的typeof运算符进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 如果typeof的运算符是数字.字符串或者布尔值,它返回的结果就是"numb ...
- curl返回302 found问题相关
在使用curl 的时候 ,偶尔会遇到一些URL跳转到新的URL,即HTTP中的3XX(redirection,重定向 ) 此时如果不设置自动跳转倒新url的话,可能会出现问题. 一些网上的解决方法: ...
- sqlserver数据库导出成insert语句
点击数据库名称右键=========>任务========>生成脚本 一.表结构导出成sql语句 二.数据导出成sql语句
- UNITY C#内存泄漏
http://www.360doc.com/content/15/0717/09/10504424_485422031.shtml
- UNITY polygon collider不随物体旋转
U3D中的一般包围框如 boxcollider, meshcollider, capsule collider等都会随物体旋转而旋转.然而polygon collider却不会. 补充:原来所有2D包 ...
- XP系统下 VS2010 选中行崩溃
- bootstrop-datatime参数配置
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- iOS下nil 、NULL、 Nil 、NSNull的区别
1.nil,定义一个空的实例,指向OC中对象的空指针. 示例代码: NSString *someString = nil; NSURL *someURL = nil; id someObject = ...
- redis的订阅和发布
#订阅和发布有什么用呢?# 特点# 1.实现一个一对多的效果,只有一个发布者,多个订阅者# 2.实时的发布消息,广播方发布消息,所有的订阅者都会受到消息,一个人同时只能接受#一个频道 1.先写一个公共 ...