C#中级教程-多态


多态是同一个行为具有多个不同表现形式或形态的能力。
多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。
多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。
在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。

静态多态性

函数重载

您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。

举例1:
using System;
namespace PolymorphismApplication
{
public class TestData
{
public int Add(int a, int b, int c)
{
return a + b + c;
}
public int Add(int a, int b)
{
return a + b;
}
}
class Program
{
static void Main(string[] args)
{
TestData dataClass = new TestData();
int add1 = dataClass.Add(1, 2);
int add2 = dataClass.Add(1, 2, 3);

        Console.WriteLine("add1 :" + add1);
        Console.WriteLine("add2 :" + add2);  
    }  
}  

}

举例2:
using System;
namespace PolymorphismApplication
{
class Printdata
{
void print(int i)
{
Console.WriteLine(“输出整型: {0}”, i );
}

  void print(double f)
  {
     Console.WriteLine("输出浮点型: {0}" , f);
  }

  void print(string s)
  {
     Console.WriteLine("输出字符串: {0}", s);
  }
  static void Main(string[] args)
  {
     Printdata p = new Printdata();
     // 调用 print 来打印整数
     p.print(1);
     // 调用 print 来打印浮点数
     p.print(1.23);
     // 调用 print 来打印字符串
     p.print("Hello Runoob");
     Console.ReadKey();
  }

}
}

运算符重载

C#可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。
举例:
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
上面的函数为用户自定义的类 Box 实现了加法运算符(+)。它把两个 Box 对象的属性相加,并返回相加后的 Box 对象。
其实使用函数实现运算符重载的效果我觉得更好,
与其:
box3=box1+box2;
不如
box3=BoxAdd(box1,box2);
后者可读性更好,可以直接去看函数实现,方便修改。

动态多态性

动态多态性是通过 抽象类 和 虚方法 实现的。

猜你喜欢

转载自blog.csdn.net/euphorias/article/details/104922118
今日推荐