c#接口和抽象方法

目录

抽象方法

1,抽象方法的定义,

2,抽象方法的特性

3,实例

接口

1,接口的定义

2,实现接口

3,接口实例

4,接口的特点

5,多接口实现

接口和抽象类的比较


抽象方法

抽象方法是指在抽象类中声明的方法,他没有方法体,而是让派生类来提供具体的实现, 抽象方法通过abstrtact关键字来声明,抽象类方法的主要目的是强制派生类必须实现 该方法,抽象方法所在的类称为抽象类

1,抽象方法的定义,

它的声明形式如下:

public abstract 返回类型 MethodName(参数列表);

2,抽象方法的特性

(1)没有方法体

(2)必须被重写,抽象方法必须在派生类中实现(override关键字)

(3)只能在抽象类中声明,抽象方法只能出现在抽象类中,不能在普通类声明

3,实例

using System;// 定义一个抽象类
public abstract class Animal
{// 抽象方法,派生类必须实现public abstract void MakeSound();// 已实现的方法public void Sleep(){Console.WriteLine("This animal is sleeping.");}}// 派生类 Dog 必须实现 MakeSound 方法
public class Dog : Animal
{// 重写抽象方法public override void MakeSound(){Console.WriteLine("Woof! Woof!");}}// 派生类 Cat 必须实现 MakeSound 方法
public class Cat : Animal
{// 重写抽象方法public override void MakeSound(){Console.WriteLine("Meow!");}}class Program
{static void Main(){// Animal 是抽象类,不能实例化// Animal animal = new Animal();  // 错误!// 创建 Dog 和 Cat 对象Animal myDog = new Dog();myDog.MakeSound();  // 输出:Woof! Woof!myDog.Sleep();      // 输出:This animal is sleeping.Animal myCat = new Cat();myCat.MakeSound();  // 输出:Meow!myCat.Sleep();      // 输出:This animal is sleeping.}}

接口

接口与抽象方法类似,也是只声明方法名,让派生类实现具体内容

1,接口的定义

接口通过interface关键字来定义,接口中可以声明方法,属性,事件等成员

例:

public interface IMyInterface

{

    // 方法声明

    void MyMethod();

    // 属性声明

    int MyProperty { get; set; }

    // 事件声明

    event EventHandler MyEvent;

}

2,实现接口

接口在被派生类继承后,派生类必须要提供接口中声明的所有方法和属性的实现

例:

public class MyClass : IMyInterface

{

    // 实现接口方法

    public void MyMethod()

    {

        Console.WriteLine("Method implemented.");

    }

    // 实现接口属性

    public int MyProperty { get; set; }

    // 实现接口事件

    public event EventHandler MyEvent;

}

3,接口实例

using System;// 定义一个接口
public interface IAnimal
{// 接口中的方法void MakeSound();// 接口中的属性string Name { get; set; }// 接口中的事件event EventHandler OnSoundMade;}// 实现接口的类
public class Dog : IAnimal
{// 属性的实现public string Name { get; set; }// 方法的实现public void MakeSound(){Console.WriteLine($"{Name} says Woof!");OnSoundMade?.Invoke(this, EventArgs.Empty);  // 触发事件}// 事件的实现public event EventHandler OnSoundMade;}// 主程序
public class Program
{public static void Main(){IAnimal myDog = new Dog { Name = "Buddy" };// 订阅事件myDog.OnSoundMade += (sender, e) =>{Console.WriteLine("A sound was made!");};// 调用方法myDog.MakeSound();}}

输出:

Buddy says Woof!

A sound was made!

4,接口的特点

(1)没有实现

(2)多重实现,一个类可以继承多个接口

(3)接口不包含字段和构造函数

(4)支持事件,接口中可以声明事件

(5)接口中的成员只能用public修饰符,不能有其他访问修饰符

5,多接口实现

例:

public interface IWalkable
{void Walk();}public interface ISwimmable
{void Swim();}public class Animal : IWalkable, ISwimmable
{public void Walk(){Console.WriteLine("Walking...");}public void Swim(){Console.WriteLine("Swimming...");}}class Program
{static void Main(){Animal animal = new Animal();animal.Walk();  // 输出:Walking...animal.Swim();  // 输出:Swimming...}}

接口和抽象类的比较

特性

接口

抽象类

成员定义

只能包含方法、属性、事件等的声明,不能包含字段

可以包含方法声明、字段、构造函数、属性等

多重继承

支持一个类实现多个接口

不支持多重继承,一个类只能继承一个抽象类

成员实现

成员只能由实现接口的类提供实现

可以提供部分实现(抽象方法不提供实现)

访问修饰符

所有成员默认是 public

可以指定访问修饰符(如 private, protected)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML——46.制作课程表

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>课程表</title></head><body><h3>课程表</h3><table border"1" cellspacing"0"><tr><th colspan"…

ARM64 Windows 10 IoT工控主板运行x86程序效率测试

ARM上的 Windows 10 IoT 企业版支持仿真 x86 应用程序&#xff0c;而 ARM上的 Windows 11 IoT 企业版则支持仿真 x86 和 x64 应用程序。英创推出的名片尺寸ARM64工控主板ESM8400&#xff0c;可预装正版Windows 10 IoT企业版操作系统&#xff0c;x86程序可无需修改而直接在ESM84…

【信息系统项目管理师】第14章:项目沟通管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划沟通管理1、输入2、工具与技术3、输出二、管理沟通1、输入2、工具与技术3、输出三、监督沟通1、输入2、工具与技术3、输出一、规划沟通管理 定义:规划沟通管理是基于每个干系人或干系人群体的信息需求…

小程序组件 —— 23 组件案例 - 轮播图图片添加

上一节实现了轮播图的最外层结构&#xff0c;但是没有通过轮播图来渲染图片&#xff0c;这一节我们先讲一下小程序中怎么来渲染图片&#xff0c;讲解完之后会通过轮播图来展示图片&#xff1b; 在微信小程序中&#xff0c;如果需要渲染图片&#xff0c;需要使用 image 组件&am…

QEMU监控器简介

QEMU监控器&#xff08;monitor&#xff09;是QEMU实现与用户交互的一种控制台&#xff0c;一般用于为QEMU模拟器提供较为复杂的功能&#xff0c;包括为客户机添加和移除一些媒体镜像&#xff08;如CD-ROM、磁盘镜像等&#xff09;&#xff0c;暂停和继续客户机的运行&#xff…

【ubuntu】安装OpenSSH服务器

参考:https://blog.csdn.net/fanjufei123456/article/details/139264814 要在Ubuntu上使用SSH连接&#xff0c;需要确保系统上安装并运行了SSH服务器。SSH服务器负责接受来自其他计算机的SSH连接请求&#xff0c;并提供对目标系统的访问权限。 在Ubuntu上&#xff0c;默认情况…

阿克曼(Ackmann)函数

时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 256MB&#xff0c;其他语言 512MB 难度&#xff1a;中等 分数&#xff1a;100 OI排行榜得分&#xff1a;12(0.1*分数2*难度) 描述 阿克曼(Ackmann)函数A(m&#xff0c;n)中&#xff0c;m&…

Python-Pdf转Markdown

使用pdfminer.sixmarkdownify pdfminer.six可以提取Pdf文本内容markdownify可以将文本内容写markdown文件 安装 pip install pdfminer.six pip install markdownify实现 from pdfminer.high_level import extract_text from markdownify import markdownifydef pdf2markdo…

JS之BOM,DOM

简介&#xff1a; BOM:Browser Object Model:浏览器对象模型,BOM中的顶级对象就是window DOM:Document Object Model 文档对象模型。页面中有一个顶级对象:Document window----皇上 document–总管太监,window对象下的属性,有的时候也是一个对象, 对象可以调用属性或者方法 w…

rem em rpx px vw的区别

在前端开发中&#xff0c;rem、em、rpx、px 和 vw 是常用的单位&#xff0c;它们各自的用途和计算方式不同&#xff0c;适用于不同的场景。以下是它们的详细对比&#xff1a; 1. px (像素) 定义&#xff1a;绝对单位&#xff0c;表示设备屏幕上的实际像素点。特点&#xff1a;…

自动驾驶新纪元:城区NOA功能如何成为智能驾驶技术的分水岭

目录 一、NOA 的定义 二、NOA 的主要特点 导航集成 场景覆盖 智能决策 高级感知能力 驾驶员参与 三、NOA 的优势 四、NOA的衡量指标 定性评价指标 安全性评价指标定义 可靠性评价指标定义 舒适性评价指标定义 通行效率评价指标 定量评价指标 五、代表厂商的实测…

石岩路边理发好去处

周末带娃去罗租公园玩&#xff0c;罗租公园旁边就是百佳华和如意豪庭小区&#xff0c;发现如意豪庭小区对面挺多路边理发摊点 理发摊点聚焦在这里的原因是刚好前面城管来了暂时避避&#xff0c;例如还有一个阿姨剪到一半就跟着过来。这里的城管只是拍了一处没有摊位的地方&…

STM32-笔记24-智能开关垃圾桶盖

一、模块及接线 二&#xff0c;项目目的 以下几个事件触发时&#xff0c;自动开盖&#xff0c;并伴随蜂鸣器短响一声&#xff0c;同时 LED 灯闪烁一下&#xff0c;2秒后自动关盖&#xff1a; 检测到有人靠近检测到有震动按下按键 KEY1 实验框图如下&#xff1a; 三、项目前期…

从零开始开发纯血鸿蒙应用之UI封装

从零开始开发纯血鸿蒙应用 一、题引二、UI 组成三、UI 封装原则四、实现 lib_comps1、封装 UI 样式1.1、attributeModifier 属性1.2、自定义AttributeModifier<T>类 2、封装 UI 组件 五、总结 一、题引 在开始正文前&#xff0c;为了大家能够从本篇博文中&#xff0c;汲…

使用ArcGIS Pro自带的Notebook计算多个遥感指数

在之前的分享中&#xff0c;我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件&#xff0c;我们可以一次性计算多种遥感指数&#xff0c;例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示&#xff0c…

超大规模分类(一):噪声对比估计(Noise Contrastive Estimation, NCE)

NCE损失对应的论文为《A fast and simple algorithm for training neural probabilistic language models》&#xff0c;发表于2012年的ICML会议。 背景 在2012年&#xff0c;语言模型一般采用n-gram的方法&#xff0c;统计单词/上下文间的共现关系&#xff0c;比神经概率语言…

Python 实现 冒泡排序算法示例

冒泡排序算法示例 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的列表&#xff0c;比较相邻的元素&#xff0c;并交换它们的位置&#xff0c;如果它们的顺序错误。这个过程会重复进行&#xff0c;直到没有需要交换的元素为止&#x…

275-增强型多功能数据采集卡PCIe-6251-EX

产品特点&#xff1a; 高速高精度数据采集&#xff0c;16bit10MSPS&#xff0c;32路单端/16路差分高速高精度任意波形发生&#xff0c;14bit165MHz&#xff0c;2路完全独立完全可编程的I/O端口&#xff0c;33个完全可编程的量程选择&#xff0c;0~5V/0~10V/5V/10VPCIe通信接口…

Llama 3 后训练(三)

目录 4. 后训练 4.1 建模 图表解读 4.1.1 聊天对话格式 4.1.2 奖励建模 4.1.3 监督微调&#xff08;Supervised Finetuning&#xff09; 4.1.4 直接偏好优化&#xff08;Direct Preference Optimization&#xff09; 4.1.5 模型平均&#xff08;Model Averaging&#x…

机器人C++开源库The Robotics Library (RL)使用手册(四)

建立自己的机器人3D模型和运动学模型 这里以国产机器人天机TR8为例,使用最普遍的DH运动学模型,结合RL所需的描述文件,进行生成。 最终,需要的有两个文件,一个是.wrl三维模型描述文件;一个是.xml运动学模型描述文件。 1、通过STEP/STP三维文件生成wrl三维文件 机器人的…