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;
    }
    //基类 Cost
    public 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
    {
        public
        static 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();
    }
    //基类 Cost
    public 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
    {
        public
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle(10, 7);
            double a = r.area();
            Console.WriteLine("面积:{0}", a);
            Console.ReadKey();
        }
    }

}

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

运行结果

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iPhone语音备忘录误删?掌握这几个技巧轻松恢复【详】

语音备忘录是一款强大的应用程序,它允许用户使用语音输入功能来快速记录想法、提醒、待办事项等。无论是在行进间、工作中还是日常生活中,语音备忘录都是一个非常实用的工具,可以帮助您随时随地记录重要信息,而无需打字或者手动输…

什么是Vector Database?

此为看完视频What is a Vector Database?后的笔记。 作者首先对数据库做了分类,其中RTweb表示real time web app。 然后对用例做了分类,最后一个就是适合于AI的近似搜索。 好处,包括灵活性,可扩展性和性价比。 本视频最重要的…

数据清洗(一)Excel

一、引言 线上出现问题之后的数据清洗是少不了的,有的可以直接通过接口或者mq补偿,有的写sql更新db就可以,但是在匹配关系比较复杂的时候就需要建立临时表做关联匹配,数据量不大可以直接用excel进行匹配。 二、Excel清洗数据 作者…

Windows系统服务器宝塔面板打开提示Internal Server Error错误

1、cmd运行bt命令 2、尝试输入16修复程序 3、如果不行,输入17升级程序

你知道弧幕影院如何制作吗?其应用领域竟如此广泛!

“沉浸式”作为如今备受热议的内容展示形式,其有着多种可实现的途径,其中弧幕影院作为一项有着独特视觉效果、沉浸式观影体验的技术类型,便是大多数影院、主题公园等娱乐场景的必备设计展项,这种弧幕影院通常使用大型的半圆形屏幕…

PyQt:实现菜单栏的点击拖动效果

一、整体步骤 1.设计UI文件 2.调用显示 3.效果展示 二、设计UI文件 1.添加 Scroll Area控件,作为菜单栏的布置区域 2.设置 Scroll Area控件的属性 3.Scroll Area控件内放置 按钮控件 组成菜单栏 此处,放置了需要了6个按钮,并设置按钮的固…

YoloV8改进策略:BackBone改进|PKINet

摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…

科学认识并正确运用人工智能技术赋能国际传播

以下文章来源:学习时报 加强国际传播能力建设,全面提升国际传播效能,形成同我国综合国力和国际地位相匹配的话语权,已成为实现中国式现代化需要解决好的一个重大问题。文生视频模型Sora,是继ChatGPT之后又一推动传播智…

SinoDB系统数据库

在SinoDB数据库的一个实例中,存在多个数据库,分为系统数据库和用户数据库。系统数据库在实例初始化时自动创建,存放实例级别上的监控信息、数据字典信息,用户能够访问而不能修改这些数据。用户数据库由用户根据需要创建&#xff0…

MyBatis3源码深度解析(十九)MyBatis日志实现

文章目录 前言第七章 MyBatis日志实现7.1 Java日志体系7.1.1 常用日志框架7.1.2 Java日志发展史7.1.3 日志接口与日志实现的绑定 7.2 MyBatis日志实现7.2.1 Log接口7.2.2 LogFactory工厂7.2.3 MyBatis日志自动查找7.2.4 MyBatis日志类型配置 7.3 小结 前言 日志是Java应用中必…

信驰达车规蓝牙模块RF-BM-2642QB1I赋能汽车T-Box

近年来,随着人们对数据传输需求的增长,传统网络布线的通讯方式逐渐显现出满足不了的局限性,与此同时,各种无线传输技术迅速发展。汽车工业同样需要无线通讯技术,但红外技术、802.11、HomeRF等技术在汽车工业中存在一定…

axure和蓝湖上查看页面的说明和上传文件

蓝湖上传文件 入口 可添加链接和文件 文件可添加 PDF,word,Excel等,不能添加压缩包,可在线预览文件内容 axure元件说明 在原型上添加说明 axure发布页 axure预览页或发布到axure的服务器上,查看页面说明的方法 点…

python中如何解析Html

在最近需要的需求中,需要 python 获取网页内容,并从html中获取到想要的内容。这里记录一下两个比较常用的python库对html的解析。 1. BeautifulSoup 它是一个非常流行的python脚本库,用于解析HTML和XML文档。如果你对 java 很熟悉&#xff…

如何在Linux系统部署Dupal CMS结合内网穿透实现无公网IP访问web界面

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&a…

美摄科技剪同款SDK解决方案全面升级

视频内容已成为企业宣传、品牌塑造和市场营销的重要载体。然而,如何快速、高效地制作出高质量的视频内容,成为摆在众多企业面前的一大难题。针对这一挑战,美摄科技凭借深厚的技术积累和创新能力,推出了全新的剪同款SDK解决方案&am…

python 爬取杭州小区挂牌均价

下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…

五、初识Django

初识Django 1.安装django2.创建项目2.1第一种方式:在终端2.2第二种方式:Pycharm 3.创建app4.快速上手4.1再写一个页面4.2templates模板4.3静态文件4.3.1static目录4.3.2引用静态文件 5.模板语法案例:伪联通新闻中心6.请求和相应案例&#xff…

23 OpenCV 直方图比较

文章目录 直方图比较的目的相关性计算 (CV_COMP_CORREL)卡方计算 (CV_COMP_CHISQR)十字计算(CV_COMP_INTERSECT)巴氏距离计算 (CV_COMP_BHATTACHARYYA )compareHist 直方图比较算子示例 直方图比较的目的 直方图比较的目的是衡量两幅图像之间的相似度或差异度。通过计算图像的颜…

数据可视化实战(三)

图书销量情况对比 import pandas as pd import matplotlib.pyplot as plt # 读取Excel数据 dfpd.read_excel(mrbook.xlsx) df序号书号序号.1月份销量rate0B189.787569e1211月15060.31B199.787569e1222月1200-0.32B259.787569e1233月33050.63B219.787569e1244月66100.54NaNNaN5…

redis从入门到实战

Redis基础 简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据存储和缓存系统。它是一个高性能的键值存储数据库,,以其快速的读写能力、丰富的数据结构和多种应用场景而受到广泛关注。默认的database有16个&…