默认接口实现”在 C# 7.3 中不可用。请使用 8.0 或更高的语言版本报错问题

ops/2024/12/26 16:46:39/

问题

 开发环境:  C# .netframework4.5.2,  Visualstudio2019,定义了如下接口,在接口中定义了一个委托和事件报错:错误    CS8370    功能“默认接口实现”在 C# 7.3 中不可用。请使用 8.0 或更高的语言版本。 

    public interface InterfaceDeSource{event ExceptionHappenedEventHandler ExceptionHappened;public delegate void ExceptionHappenedEventHandler(object sender, ClassDeviceException de);}

在C# 7.3中,接口不能直接定义事件或委托的实现,但它们可以定义事件和委托的类型。以下是如何在C# 7.3(或更早版本)的接口中定义委托和事件的示例:

定义委托

首先,你可以在接口外部定义一个委托类型,然后在接口中使用该委托类型声明事件或方法。但是,C# 允许你在接口内部直接声明委托类型,如下所示:

public interface IMyInterface
{// 在接口中定义委托类型delegate void MyDelegate(string message);// 使用委托类型声明方法void MyMethod(MyDelegate del);
}


然而,请注意,从C# 9.0开始,接口内部定义委托类型的功能被标记为过时(obsolete),因为更好的做法是在接口外部定义委托类型。对于C# 7.3,虽然你可以在接口中定义委托类型,但建议的做法是将其放在接口外部。

定义事件

在C# 7.3中,接口可以声明事件,但事件的实现(即添加和移除事件处理程序的方法)必须在实现接口的类中提供。接口只能声明事件的类型和名称。

public interface IMyInterface
{// 在接口中声明事件event MyDelegate MyEvent;
}// 假设MyDelegate是在接口外部定义的,或者按照上面的方式在接口内部定义(尽管不推荐)
// public delegate void MyDelegate(string message);public class MyClass : IMyInterface
{// 提供事件的具体实现public event MyDelegate MyEvent;// 触发事件的方法protected virtual void OnMyEvent(string message){MyEvent?.Invoke(message);}// 其他实现接口的方法...
}


在这个例子中,IMyInterface接口声明了一个名为MyEvent的事件,该事件使用MyDelegate委托类型。MyClass类实现了IMyInterface接口,并提供了MyEvent事件的具体实现,包括一个用于触发事件的方法OnMyEvent

解决办法:定义委托在接口外部就可以了。

        public delegate void ExceptionHappenedEventHandler(object sender, ClassDeviceException de);

总结

  • 在C# 7.3中,接口可以声明委托类型和事件,但委托类型的定义通常建议放在接口外部。
  • 事件的实现(添加和移除事件处理程序)必须在实现接口的类中提供。
  • 接口只能声明事件的类型和名称,不能提供事件的具体实现。

http://www.ppmy.cn/ops/145164.html

相关文章

centos server系统新装后的网络配置

当前状态: ping www.baidu.com报错 1、检查IP ip addr show记录要编辑的网卡 link/ether 后的XX:XX:XX:XX:XX:XX号 2、以em1为例: vi /etc/sysconfig/network-scripts/ifcfg-em1,新增如下行: HWADDRXX:XX:XX:XX:XX:XX(具体值…

【医学分割】跨尺度全局状态建模和频率边界指导的分割架构

SkinMamba: A Precision Skin Lesion Segmentation Architecture with Cross-Scale Global State Modeling and Frequency Boundary Guidance 本文提出了一种基于 Mamba 和 CNN 的混合架构,称为 SkinMamba。它在保持线性复杂性的同时,提供了强大的长距离…

软件工程课程知识点

一、软件与软件工程概述 1. 软件的组成与演化 软件的构成 Software(软件) 通常由 computer programs(计算机程序)、data structures(数据结构)、software description information(软件描述信息) 组成,或者说由 set of programs(程序集合)、documentation(文档) …

C++前言

1.什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序,对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言不适合,为了解决软件危机,20世纪80年代,计算机界提出…

在vscode中的ESP-IDF插件中使用Arduino框架作为组件

首先要先安装好ESP-IDF插件,然后进行如下操作 1、安装特定版本ESP-IDF 在ESP-IDF插件中,Advanced->Configure ESP-IDF Extension 选Advanced,Select ESP-IDF version:,选好版本,点Configure Tools,即可…

Echarts之yAxis属性超超超级详情版学习

yAxis 属性说明类型id组件idstringshow是否显示y轴booleanalignTicks在多个 y 轴为数值轴的时候,可以开启该配置项自动对齐刻度。只对value和log类型的轴有效booleanpositiony 轴的位置stringoffsetY 轴相对于默认位置的偏移,在相同的 position 上有多个…

各种网站(学习资源及其他)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…

MFC/C++学习系列之简单记录5

MFC/C学习系列之简单记录5 前言控件位置设置实际说明C# Tab位置设定的相关使用C MFC中Tab位置设定的相关使用 总结 前言 需求提及不够清楚,没有详细的文档输入,甚至协议都是看代码,然后查文件才确认协议更改。这样对新来的开发人员很不友好。…