首页 > C#教程 阅读:15352

C#多态

多态与封装继承被视为面向对象编程的三大特性。 多态(Polymorphism)是一个希腊词,指“多种形态”,在 C# 中具有两种类型的多态:
  • 编译时多态:通过 C# 中的方法重载和运算符重载来实现编译时多态,也称为静态绑定或早期绑定;
  • 运行时多态:通过方法重载实现的运行时多态,也称为动态绑定或后期绑定。

1、编译时多态

在编译期间将函数与对象链接的机制称为早期绑定,也称为静态绑定。C# 提供了两种技术来实现编译时多态,分别是函数重载和运算符重载,本节主要来介绍一下函数重载,运算符重载会在后面进行讲解。

函数重载

在同一个作用域中,可以定义多个同名的函数,但是这些函数彼此之间必须有所差异,比如参数个数不同或参数类型不同等等,返回值类型不同除外

【示例】定义名为 print 的函数来打印不同类型的数据:
using System;
namespace c.biancheng.net
{
 class Demo
 {
 void print(int i){
 Console.WriteLine("打印 int 类型的数据:{0}", i);
 }
 void print(double d){
 Console.WriteLine("打印 double 类型的数据:{0}", d);
 }
 void print(string s){
 Console.WriteLine("打印 string 类型的数据:{0}", s);
 }
 static void Main(string[] args) 
 {
 Demo p = new Demo();
 p.print(123);
 p.print("C语言中文网");
 p.print(3.1415926);
 }
 }
}
运行结果如下:

打印 int 类型的数据:123
打印 string 类型的数据:C语言中文网
打印 double 类型的数据:3.1415926

2、运行时多态

C# 允许您使用 abstract 关键字来创建抽象类,抽象类用于实现部分接口。另外,抽象类包含抽象方法,可以在派生类中实现。

下面列举了一些有关抽象类的规则:
  • 不能创建一个抽象类的实例;
  • 不能在一个抽象类外部声明抽象方法;
  • 通过在类定义时使用 sealed 关键字,可以将类声明为密封类,密封类不能被继承,因此抽象类中不能声明密封类。

【示例】下面的程序演示了一个抽象类:
using System;
namespace c.biancheng.net
{
 abstract class Shape{
 public abstract int area();
 }
 class Rectangle : Shape{
 private int width, height;
 public Rectangle(int w, int h){
 width = w;
 height = h;
 }
 public override int area(){
 return (width * height);
 }
 }
 class Demo
 {
 static void Main(string[] args) 
 {
 Rectangle r = new Rectangle(12,15);
 double a = r.area();
 Console.WriteLine("长方形的面积为: {0}",a);
 Console.ReadKey();
 }
 }
}
运行结果如下:

长方形的面积为: 180

AltStyle によって変換されたページ (->オリジナル) /