首页 > 编程语言 >每个.NET开发都应掌握的C#接口知识点

每个.NET开发都应掌握的C#接口知识点

时间:2023-08-14 12:46:25浏览次数:36  
标签:知识点 C# void 接口 实现 NET 回调 public

作为.NET开发者,接口是C#必须掌握的知识点,接口是C#中实现多态和组件间互操作性的关键机制之一。 接口是一种抽象的类型,它定义了一组成员(方法、属性、事件等)的规范,但没有实现代码。类可以实现一个或多个接口,以表明它们提供了特定的功能。

以下是每个.NET开发者应该掌握的C#接口知识点:

1、声明接口和实现接口

在C#中,使用`interface`关键字来声明接口。例如:

//声明接口
 public interface IMyInterface
   {
       void SomeMethod();
       int SomeProperty { get; set; }
   }
   

使用`class`关键字来定义一个类,并使用冒号(:)符号来实现一个或多个接口。实现接口的类必须提供接口中定义的所有成员的实现。

//实现了上面的接口
 public class MyClass : IMyInterface
   {
       public void SomeMethod()
       {
           // 实现接口定义的方法
       }
      //属性
       public int SomeProperty { get; set; }
   }

2、接口的多态性

接口使得多态编程变得容易,允许通过接口引用来引用实现该接口的不同类的实例,实现运行时多态性。比如需要链接两个数据库的,可以定义一个数据接口,分别用两个类来继承这个接口。

 ISqlHelperInterface obj = new SqlSeverHelper();//SqlSever
 ISqlHelperInterface obj = new MysqlHelper();//mysql

3、接口与抽象类的区别

1)类可以实现多个接口,但只能继承一个抽象类。

2)接口只能定义成员的签名,而抽象类可以包含具体方法。

3)接口成员默认为公共访问性,而抽象类可以有不同访问性的成员。

4、 显式接口实现

当一个类实现多个接口且这些接口有相同的成员签名时,可以使用显式接口实现来解决命名冲突。

   public class MyClass : IInterface1, IInterface2
   {
       void IInterface1.SomeMethod()
       {
           // 实现IInterface1接口的方法
       }

       void IInterface2.SomeMethod()
       {
           // 实现IInterface2接口的方法
       }
   }

5、接口的继承

接口可以继承其他接口,继承的接口会包含父接口的成员,并可以在实现时提供所有父接口和当前接口的成员实现。

using System;

// 定义一个基本的接口
public interface IShape
{
    void Draw();
}

// 定义继承自IShape的子接口
public interface ICircle : IShape
{
    double Radius { get; set; }
}

// 实现接口
public class Circle : ICircle
{
    public double Radius { get; set; }

    public void Draw()
    {
        Console.WriteLine($"绘制半径为 {Radius}的圆");
    }
}

class Program
{
    static void Main()
    {
        // 创建一个Circle对象并使用ICircle接口引用
        ICircle circle = new Circle();
        circle.Radius = 5.0;
        circle.Draw();
    }
}

在这个案例中,首先定义了一个基本接口IShape,它有一个方法Draw,表示形状的绘制。然后,我们定义了一个继承自IShape的子接口ICircle,它增加了一个属性Radius,用于表示圆的半径。

接着,我们实现了ICircle接口的具体类Circle,它包含了Radius属性和Draw方法的实现。

最后,在Main方法中,我们创建了一个Circle对象,并使用ICircle接口引用它。这样,我们可以通过接口调用Draw方法,并在运行时动态选择实现了ICircle接口的类。

6、接口定义回调方法

接口可以定义回调方法,在C#3.0之前没有委托,可以使用。但C# 3.0引入的委托(delegate)也是一种处理回调的有效方式。案例如下:

using System;

// 定义一个回调接口
public interface ICallback
{
    void OnCallback(string message);
}

// 实现回调接口的类
public class CallbackHandler : ICallback
{
    public void OnCallback(string message)
    {
        Console.WriteLine($"接受回调信息: {message}");
    }
}

// 使用回调接口的类
public class Caller
{
    private ICallback callback;
    public Caller(ICallback callback)
    {
        this.callback = callback;
    }
    public void DoSomethingAndCallback()
    {
        // 模拟完成某些操作后触发回调
        string message = "操作完成";
        callback.OnCallback(message);
    }
}

class Program
{
    static void Main()
    {
        // 创建回调处理器对象
        CallbackHandler handler = new CallbackHandler();
        // 创建调用者对象,并传入回调处理器
        Caller caller = new Caller(handler);
        // 调用DoSomethingAndCallback方法,将触发回调处理器的OnCallback方法
        caller.DoSomethingAndCallback();
    }
}

委托回调和接口回调是实现回调机制的两种不同方式。委托回调通过声明委托并将具体回调方法作为参数传递给其他类或方法,实现简单的回调任务,但耦合度相对较高,处理一种类型的回调。接口回调通过定义接口来规范回调方法,并允许类实现多个接口处理复杂的回调场景,降低耦合度,提供更大的灵活性和可扩展性,但代码可能较为复杂。根据需求和场景,可以选择合适的方式实现回调功能,接口回调适用于复杂场景,委托回调适用于简单任务。

结语

掌握C#的接口知识点对于每个.NET开发者来说都是非常重要的。接口知识点将使您能够更好地编写面向对象的、灵活的、可扩展的.NET代码。

希望本文对你有所收获,对于C#的接口知识点,你还知道哪些?欢迎留言讨论或者吐槽本文。

参考:

1、chatgpt

2、微软官方文档 :

learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/interface

来源公众号:DotNet开发跳槽

标签:知识点,C#,void,接口,实现,NET,回调,public
From: https://www.cnblogs.com/xbhp/p/17628307.html

相关文章

  • 实践教程|源码级理解Pytorch中的Dataset和DataLoader
    前言 本文30分钟带你达到对Pytorch中的Dataset和DataLoader的源码级理解,并提供构建数据管道的3种常用方式的范例,扫除你构建数据管道的一切障碍。本文转载自算法美食屋作者|梁云1991仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最......
  • 【笔记】YOLO v3:An Incremental Improvement
     第一部分:论文与代码论 文:https://pjreddie.com/media/files/papers/YOLOv3.pdf翻 译:https://zhuanlan.zhihu.com/p/34945787代 码:https://github.com/pjreddie/darknet官 网:https://pjreddie.com/darknet/yolo旧 版: https://pjreddie.com/darknet/yolov2/ https://p......
  • JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践 | 京东云技术团队
    前言自2014年发布以来,JDK8一直都是相当热门的JDK版本。其原因就是对底层数据结构、JVM性能以及开发体验做了重大升级,得到了开发人员的认可。但距离JDK8发布已经过去了9年,那么这9年的时间,JDK做了哪些升级?是否有新的重大特性值得我们尝试?能否解决一些我们现在苦恼的......
  • C语言实现字符串的模式匹配
    一.模式匹配字符串的模式匹配算法是用来查找一个字符串中是否存在另一个指定的字符串(即模式)的算法。常见的模式匹配算法包括暴力匹配算法、KMP算法、Boyer-Moore算法和Rabin-Karp算法。暴力匹配算法:暴力匹配算法也称为朴素匹配算法,是最简单的一种字符串匹配算法。它从主串的第一......
  • ChatGPT 问答00013 开源项目QGIS
    QGIS(全称QuantumGIS)是一个自由开源的地理信息系统(GIS)软件,它提供了一套功能强大的地图制作、空间分析和数据管理工具。以下是关于QGIS开源项目的一些信息:项目介绍:QGIS是由一个全球性社群共同开发的自由软件项目。它的目标是为用户提供一个易于使用、跨平台、功能丰富的GIS软件......
  • session 和 cookie 的区别是什么
    Session和Cookie都是在Web开发中用于维护用户状态和存储数据的机制,但它们有一些重要的区别1.存储位置Cookie:Cookie是存储在用户浏览器中的小型文本文件,通常由服务器在HTTP响应头中发送给浏览器,然后浏览器将其存储在用户的计算机上。每当用户发送请求时,浏览器都会将相关的Coo......
  • .NET爬取美图官网首页数据实战
    前言:在当今信息化社会,网络数据分析越来越受到重视。而作为开发人员,掌握一门能够抓取网页内容的语言显得尤为重要。在此篇文章中,将分享如何使用.NET构建网络抓取工具。详细了解如何执行HTTP请求来下载要抓取的网页,然后从其DOM树中选择HTML元素,进行匹配需要的字段信息,从......
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:81-100)
    第81题某公司新购入一台网络设备,作为网络管理员,初次配置该设备通常通过什么方式?A、FTPB、TelnetC、SNMPD、Console口登录答案:D解析:通常情况下,初次配置网络设备会通过Console口登录的方式进行。Console口是一种串口接口,可以直接连接到设备的控制台端口。通过Console口登录设备......
  • CS231n: Convolutional Neural Networks for Visual Recognition
    CS231n:ConvolutionalNeuralNetworksforVisualRecognitionEventTypeDateDescriptionCourseMaterialsLecture1Tuesday April4CourseIntroduction Computervisionoverview Historicalcontext Courselogistics[slides] [video]Lecture2Thursday April6Image......
  • 给id拼接变量,给nth-child()拼接变量
    <divclass="daic"><pclass="reward"></p><pclass="reward"></p><pclass="reward"></p><pclass="reward"></p><pclass="reward&......