C#多态

1.定义

多态是同一个行为具有多个不同表现形式或形态的能力。

多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。

多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。

静态多态性:在编译时,方法和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:方法重载运算符重载

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

在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

2.实现多态的两个因素

1)子类重写父类方法

2)使用父类的类型(子类转换为父类:向上转型)

class Animal

{

  public virtual void call() {

Console.WriteLine("无声的叫唤");

}

}

class Dog : Animal

 {

        // new的作用是隐藏父类的同名方法

        //public new void call() {

//Console.WriteLine("叫声:汪~汪~汪~");

//}  

        public override  void call() {

Console.WriteLine("叫声:汪~汪~汪~");

}

        public void smell() {

Console.WriteLine("嗅觉相当不错!");

}

 }

Animal animal = new Dog(); //向上转型

animal.call();

 向上转型:将子类对象转为父类对象。此处父类对象可以是接口或抽象类

转化后的父类对象具有父类所有方法,若方法被子类重写override,那么实际调用时,调用的是重写后的实现。

    int a=(int)3.5;

Dog dog = (Dog)animal;//向下转型

dog.call();                 

dog.smell();

 向下转型:把父类对象转为子类对象。

    转化后的子类对象,跟一般的继承子类对象一样。具有子类所有方法(包括重写方法)+父类所有方法(被重写的方法,按重写的算。)

3.案例

public class Shape
{
    public int X { get; private set; }
    public int Y { get; private set; }
    public int Height { get; set; }
    public int Width { get; set; }
  
    // 虚方法
    public virtual void Draw()
    {
        Console.WriteLine("执行基类的画图任务");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        base.Draw();
        Console.WriteLine("画一个圆形");
    }
}
class Rectangle : Shape
{
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值