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

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

问题

 开发环境:  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.kler.cn/a/458726.html

相关文章:

  • 详细了解Redis分布式存储的常见方案
  • Docker部署ubuntu测试环境
  • java实现一个kmp算法
  • Zookeeper模式安装Kafka(含常规、容器两种安装方式)
  • C++设计模式:状态模式(自动售货机)
  • 使用exe4j将jar转成exe、java打包exe
  • 亚马逊云科技re:Invent:2025年将发生新变化
  • uni-app开发-识图小程序-主要功能以及首页实现
  • 初始 ShellJS:一个 Node.js 命令行工具集合
  • redis清除策略
  • 主从复制架构介绍和主从复制配置案例
  • Elasticsearch filter context 的使用原理
  • 算法基础二:选择排序
  • Node项目——从0开始构建且共享至Gitee
  • python: Oracle Stored Procedure query table
  • elasticsearch中的倒排索引
  • rust 的 2015、2018、2021 这三个 edition
  • Vben5登录过期无法再次登录问题,http状态码
  • PVE虚拟化平台之开启虚拟机IP显示方法
  • Spring Boot项目接收前端参数的11种方式
  • 深度学习笔记(9)——神经网络和反向传播
  • HarmonyOs DevEco studio小技巧40--应用名称、图标与启动动画修改全攻略
  • 高仿CSDN编辑器,前端博客模板
  • 基于NodeMCU的物联网窗帘控制系统设计
  • 神经网络-AlexNet
  • Android笔试面试题AI答之非技术问题(1)