当前位置: 首页 > news >正文

C#多态性

文章目录

  • C#多态性
    • 静态多态性
      • 函数重载
      • 函数重载
    • 动态多态性
      • 运行结果

C#多态性

静态多态性

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

函数重载

运算符重载
运算符重载将在下一章节讨论,接下来我们将讨论函数重载。

函数重载

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

下面的实例演示了几个相同的函数 Add(),用于对不同个数参数进行相加处理:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp2
{class Shape{public void setWidth(int w){width = w;}public void setHeight(int h){height = h;}protected int width;protected int height;}//基类 Costpublic interface Cost{int getCost(int area);}// 派生类class Rectangle : Shape, Cost{public int getArea(){return (width * height);}public int getCost(int area){return area * 8;}}public class Data{public int AddData(int a,int b){return a + b;}public int AddData(int a, int b,int c){return a + b + c * 10;}}class Test{publicstatic void Main(string[] args){int add1;int add2;Data data = new Data();add1 = data.AddData(2, 9);add2 = data.AddData(8, 9, 7);Console.WriteLine("add1的值:" + add1);Console.WriteLine("add2的值:" + add2);Console.ReadKey();}}
}

动态多态性

C# 允许您使用关键字 abstract 创建抽象类,用于提供接口的部分类的实现。当一个派生类继承自该抽象类时,实现即完成。抽象类包含抽象方法,抽象方法可被派生类实现。派生类具有更专业的功能。
您不能创建一个抽象类的实例。
您不能在一个抽象类外部声明一个抽象方法。
通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp2
{abstract class Shape{abstract public int area();}//基类 Costpublic interface Cost{int getCost(int area);}// 派生类class Rectangle : Shape{private int len;private int width;public Rectangle(int a = 0, int b = 0){len = a;width = b;}public override int area(){//Console.WriteLine("面积:");return (width * len);}}public class Data{public int AddData(int a,int b){return a + b;}public int AddData(int a, int b,int c){return a + b + c * 10;}}class Test{publicstatic void Main(string[] args){Rectangle r = new Rectangle(10, 7);double a = r.area();Console.WriteLine("面积:{0}", a);Console.ReadKey();}}}

如果不实现Shape抽象类的这个方法,如果不实现就会报错
在这里插入图片描述

运行结果

在这里插入图片描述
当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法。

虚方法是使用关键字 virtual 声明的。

虚方法可以在不同的继承类中有不同的实现。

对虚方法的调用是在运行时发生的。

动态多态性是通过 抽象类 和 虚方法 实现的。
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 2024/3/24 蓝桥杯
  • 酒店智能水电表管理解决方案:提升效率、节约成本与环保并重
  • go面向对象
  • 软件杯 深度学习 机器视觉 人脸识别系统 - opencv python
  • Leetcode的使用方法
  • 深入解析代理模式:使用场景、实现及应用实例
  • Nextcloud激活被锁用户
  • 深入了解 Flutter 中多种预定义的 Physics 类
  • ideaSSM 学员信息管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目
  • 社交媒体的未来:探讨Facebook的发展趋势
  • scala05-函数式编程02
  • C语言中常用的文件操作
  • Mysql数据库——高级SQL语句补充
  • 等级保护测评无补偿因素的高风险安全问题判例(共23项需整改)
  • 操作系统理论 第四章(存储器管理)—第一节(存储器的层次结构)
  • Google 是如何开发 Web 框架的
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Asm.js的简单介绍
  • Codepen 每日精选(2018-3-25)
  • CODING 缺陷管理功能正式开始公测
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • ES学习笔记(12)--Symbol
  • express如何解决request entity too large问题
  • Protobuf3语言指南
  • Python - 闭包Closure
  • REST架构的思考
  • 成为一名优秀的Developer的书单
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 代理模式
  • 每天一个设计模式之命令模式
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何用vue打造一个移动端音乐播放器
  • ​520就是要宠粉,你的心头书我买单
  • !!java web学习笔记(一到五)
  • # 数据结构
  • #Z2294. 打印树的直径
  • (c语言)strcpy函数用法
  • (floyd+补集) poj 3275
  • (SpringBoot)第七章:SpringBoot日志文件
  • (动态规划)5. 最长回文子串 java解决
  • (二)学习JVM —— 垃圾回收机制
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (学习日记)2024.01.19
  • (一)Neo4j下载安装以及初次使用
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)大道至简,职场上做人做事做管理
  • (转)一些感悟
  • ******IT公司面试题汇总+优秀技术博客汇总
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *Django中的Ajax 纯js的书写样式1