16.初识接口2.0 C#

使用接口的默认实现

使用接口来定义变量和接受 实现接口的类实例

以及实现接口但是不定义方法的特殊情况

适合初学C#者

CSDN技术分享:探索C#接口默认方法的实现(文心一言AI生成)

在C#编程中,接口作为一种定义类行为的契约,通常不包含具体实现。但自C# 8.0起,接口支持默认方法的引入,为接口提供了更为灵活和强大的功能。以下是一个简短示例,展示了如何在C#中定义接口默认方法,并在实现该接口的类中覆盖这些方法。

代码段首先定义了一个名为Interface1的接口,其中包含一个默认实现的Method方法。随后,我们定义了两个类class1class2,它们都实现了Interface1接口。class1覆盖了Method方法,提供了自己的实现;而class2则未覆盖该方法,因此将使用接口中的默认实现。

Program类的Main方法中,我们展示了如何创建这些类的实例,并通过接口类型的变量调用Method方法。特别地,当使用class2的实例调用Method时,将展示接口默认方法的作用。

需要注意的是,尽管class2未显式实现Method方法,但由于接口默认方法的存在,我们仍可以通过class2的实例调用该方法,而不会引发编译错误。这一特性极大地丰富了C#接口的功能,使其能够更灵活地定义和复用代码。

(注:代码中关于MyMethod的注释是一个小错误,应为Method方法的注释。在实际应用中,请确保注释与代码一致,以避免混淆。)

cs 复制代码
using System;

public interface Interface1
{

    // 默认接口方法
    void Method()
    {
        Console.WriteLine("接口的默认实现");
    }
}

public class class1 : Interface1
{
    public void Method()
    {
        Console.WriteLine("实现1");
    }
}

public class class2 : Interface1
{
    
    // 不覆盖MyMethod,将使用接口中的默认实现
}

class Program
{
    static void Main(string[] args)
    {
        class1 a = new class1();
        a.Method();


        //接口名称可以像普通的类一样定义变量
        //并且可以接受 实现接口的类的实例
        Interface1 b = new class2();
        b.Method(); 

        Interface1 c = new class1();
        c.Method();

        //下面这行会在Method报错,因为class2中没有方法
        //然而你如果给文心一言看这个报错,他会认为不会报错
        //class2 d = new class2();
        //d.Method();
    }
}

输出结果:

cs 复制代码
实现1
接口的默认实现
实现1
相关推荐
ZJU_统一阿萨姆8 小时前
【算子开发】环境搭建与第一个CUDA程序
开发语言·人工智能·系统架构
Evand J8 小时前
【MATLAB例程,车联网8】MPC网联车辆节能跟驰控制:速度跟踪、间距约束与能耗优化。附MATLAB完整代码的下载链接
开发语言·matlab·车联网·调度·mpc·节能·车辆控制
ttwuai9 小时前
Go 后台接入 SSO 后菜单正常但接口 403,怎么排查权限链路?
开发语言·后端·golang
Canmag 兴隆磁性9 小时前
C 系列充磁机
c语言·开发语言·学习·永磁材料·充磁·退磁
公子小六9 小时前
基于.NET的Windows窗体编程之WinForms音频控件
windows·microsoft·c#·.net·音视频·winforms
benchmark_cc9 小时前
批量获取量化数据时,如何设置合理的超时和重试机制?——QuantDash 高性能实战指南
开发语言·人工智能·python·pandas·量化·quantdash
2601_966949659 小时前
使用 Pandas 读取批量数据时如何避免内存溢出?QuantDash 量化数据工程师避坑指南
开发语言·python·pandas·tushare·akshare·quantdash
郑州光合科技余经理9 小时前
海外版多语言团购系统架构:主数据互通与核销边界
java·开发语言·前端·后端·系统架构·php·ai编程
ttwuai10 小时前
Go 后台图片上传到对象存储后,预览 403/404 怎么排查?
开发语言·golang
绿浪198410 小时前
c# 结构体 能不能直接封送检测
开发语言·c#