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的概念与具体用法,并以实例的形式予以总结归纳,需要的朋友可以参考下 本文实例分 ...
随机推荐
- kvmgt-kernel 实现GPU虚拟化
KVMGT-kernel是Intel开源技术01.org推出的一项完整的GPU虚拟化解决方案,在KVM和XEN的基础上实现.本文档对该技术进行相应测试,让大家有个基本参考和了解.KVMGT-kerne ...
- params over length limit is 20
- numpy中的ndarray方法和属性
原文地址 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是 ...
- window 10 javac不是内部或外部命令
今天在新电脑上配置Java环境变量(window 10),不管怎么配置都是提示“javac不是内部或外部命令”,java,java -version命令是正常的. 后来发现是path路径配置的不对,修 ...
- css常用属性总结:颜色和单位
在css代码编写中,估计颜色和单位是必不可少的,然而在css中关于颜色和单位值的写法有很多种写法,所以有必要把它弄清楚. 颜色 当初我在初学前端的时候,就会冒出一个疑问“我该如何设置网页颜色?”,一般 ...
- archlinux错误:无法提交处理 (无效或已损坏的软件包)
1.首先更新一下密钥,如果没有安装archlinux-keyring,请及时安装 sudo pacman-key --refresh-keys 2.重新加载相应的签名密钥 sudo pacman-ke ...
- ubuntu17.10 安装CUDA
1. 更新apt-get源列表 sudo apt-get update sudo apt-get upgrade 2. 添加驱动源 sudo add-apt-repository ppa:graphi ...
- Linux运维实战之DNS(bind)服务器的安装与配置
转自http://sweetpotato.blog.51cto.com/533893/1598225 上次博文我们讨论了DNS的基础,本次博文我们重点来看看如何配置一台DNS服务器. [本次博文的主要 ...
- ubuntu server静态IP和DNS服务器设置
Ubuntu的网络参数保存在文件 /etc/network/interfaces中, 默认设置使用dhcp,动态IP获取. 设置静态ip的方法如下: 1) 编辑 /etc/network/inte ...
- PHP安装memcache扩展
1.下载memcache.dll扩展 http://pecl.php.net/package/memcache/3.0.8/windows .下载完成之后, 将其中的php_memcache.dll ...