【C#】接口定义和使用知多少

这篇具有很好参考价值的文章主要介绍了【C#】接口定义和使用知多少。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给自己一个目标,然后坚持一段时间,总会有收获和感悟!
最近在封装和参考sdk时,看到一个不错的写法,并且打破自己对接口和实现类固定的观念,这也充分说明自己理解掌握的知识点还不够深。

【C#】接口定义和使用知多少,C#,c#,开发语言,接口

前言

在自己的固有的观念里,接口类所定义的成员,实现类在继承接口类后,一定都是要实现的。
其实也没有错,但是还会有变通的写法,比如继承一个定义了100个方法的接口,A部分类继承实现10个接口,B部分类继承实现20个接口,C部分类继承实现剩余的70个,这样的写法可以很清晰的按功能模块进行文件命名,而接口类只需要一个即可,方便维护。

总结:如何才能从中级进阶到高级开发水平,那么灵活变通的思维就是一个很好的判断条件之一,当然也可以说是一个经验积累所支撑。
缺乏时间进行深度思考(可能也是因为所处环境影响或者自身自律不够,导致没有太多时间进行自我深度思考和实践验证)

一、什么是接口

1.1、规范

在 C# 中,接口(Interface)是一种定义规范,而不是定义行为的类型。接口定义了一个对象或者类要实现的操作,它可以定义一组方法、属性、索引器和事件。
在 C# 中,我们使用 interface 关键字来定义一个接口。接口定义中只包含属性和方法的签名,而没有实际的方法实现或字段。可以把一个接口看做是一组公共的属性和方法的规范。
以下是一个简单的接口定义的例子:

interface ILogger
{
    void Log(string message);
    string Name { get; set; }
}

在上面的例子中,ILogger 接口定义了一个 Log() 方法和一个 Name 属性。任何实现 ILogger 接口的类都必须实现这两个成员。

1.2、多态性

接口的主要作用是为多态性提供支持。多态性是面向对象编程的一个核心概念,它允许我们使用一个对象的接口,而不需要了解对象的实际类型。当一个对象实现了一个接口,它就可以用作该接口类型的实例,从而实现多态性调用。
例如,假设我们有一个 ILogger 接口和一个 FileLogger 类,它实现了该接口:

class FileLogger : ILogger
{
    public void Log(string message)
    {
        // 将message记录到文件中
    }

    public string Name { get; set; }
}

我们可以创建一个 ILogger 类型的变量,并将它设置为一个 FileLogger 类型的实例:

ILogger logger = new FileLogger();
logger.Log("Hello, world!");

在上面的例子中,变量 logger 的类型是 ILogger,它实际上持有一个 FileLogger 类型的实例。
我们可以使用 ILogger 类型的 logger 变量来调用 Log() 方法,即使我们不知道它实际上是一个 FileLogger 对象。
这就是多态性调用的概念,它是通过接口来实现的。

总的来说,接口是一个规范,定义了一个对象或者类所必须实现的操作。接口对于实现多态性调用和组件重用都极为有用。

二、使用场景

接口在 C# 中有许多常见的使用场景

2.1、实现多态性

接口是实现多态性的核心机制之一。通过使用接口,可以在不知道对象的具体类型的情况下,调用其实际类型的方法。这使得代码更加灵活和可扩展。接口常用于定义公共的操作,例如数据库访问接口、日志记录接口等。

2.2、插件式开发

接口在插件式开发中使用广泛。通过定义插件接口,可以为应用程序提供一种可扩展的方式,使得开发者可以编写自己的插件,并通过实现接口与应用程序进行交互。

2.3、依赖注入

接口在依赖注入(Dependency Injection)模式中发挥重要作用。通过将接口作为依赖的类型,可以实现松散耦合的设计,并支持替换特定实现的能力。这使得代码更具灵活性、可测试性和可维护性。

2.4、面向接口编程

面向接口编程是一种设计原则,强调编写代码时应关注接口而不是具体实现。这种方式使得代码更加灵活、可替换和可测试。通过编写接口,可以定义所需的功能和约定,并确保代码遵循这些约定。

2.5、合同与契约

接口可以用作合同和契约的定义。在设计类、库或服务时,接口定义了所需要的方法和成员,以及它们的预期行为。这样,其他开发人员在使用你的代码时,可以遵循这些接口,以确保他们的代码与你的代码正确地交互。

这只是一些常见的使用场景,实际上接口在开发中的应用非常广泛。
接口提供了一种定义和实现规范的机制,可以增强代码的可扩展性、可维护性和可测试性。
通过合理地使用接口,可以使代码更加灵活、可插拔,并促进良好的设计和组织。

三、简单举例

3.1、全继承

在定义和继承接口时,经常会看到如下错误提示,MyClass不实现接口成员IBase.One()。
意思就是当前实现类未对接口定义的方法进行实现。通常这样继承接口的实现类,接口定义了多少个方法就要实现多少个。

  • 错误写法

  • 正确写法

public interface IBase
{
    string One();
    string Two();
    string Thre();
}

public class MyClass : IBase
{
    public string One()
    {
        return "one";
    }

    public string Two()
    {
        return "two";
    }

    public string Thre()
    {
        return "three";
    }
}

3.2、部分继承

这里指的部分是指分开多个部分类继承实现,分开的类合起来实现的方法就是接口类定义好的方法

  • 错误写法

  • 正确写法

public interface IBase
{
    string One();
    string Two();
    string Thre();
}

partial class MyClassNew : IBase
{

}

partial class MyClassNew
{
    public string One()
    {
        return "One";
    }

}

partial class MyClassNew
{
    public string Two()
    {
        return "Two";
    }

}

partial class MyClassNew
{
    public string Thre()
    {
        return "Thre";
    }

}

虽然类名是一样,但是文件名可以命名不同的功能模块名称,比如

MyClassNew > partial class MyClassNew:IBase
UserClass > partial class MyClassNew
LogClass > partial class MyClassNew
ProductClass > partial class MyClassNew

四、如何提高

如何提高编码水平,我觉得如下几点建议可以参考下,不管你是否有无天赋或者编程优势,都可以从以下几点建议得到提升。

4.1、多练习

编码水平的提高需要通过不断地实践和尝试来进行。写更多的代码并解决实际问题,可以帮助你积累经验和知识,并提高编码水平。

4.2、阅读和理解源码

学习其他人的代码,可以帮助你了解新的编程技术和代码组织方式。通过阅读别人的代码,你可以了解到更好的实现方式和常见的设计模式,这有助于提高你的编码技巧。

4.3、学习算法和数据结构

算法和数据结构是编程的基础。学习和掌握算法和数据结构,可以使你更加深入地理解编程的本质,并能够更有效地解决问题。

4.4、使用工具

使用强大的编辑器和调试器可以提高编码效率和准确性。学习和使用脚本工具、自动化测试工具、代码重构工具和其他有助于优化开发流程的工具,可以帮助你更加专注于代码的核心功能。

4.5、参与社区

比如:csdn就是很好的学习平台,在平台上可以学习到很多技术知识以及认识都多优秀的小伙伴。
参与开源项目、博客、论坛和其他在线社区可以帮助你与其他开发人员互动,学习新技术和解决问题。与他人分享自己的代码和技能,可以促进合作和学习。

4.6、持续学习

编程技术和工具不断发展和改进,因此持续学习非常重要。阅读最新的文档、参加课程和工作坊、参加会议和活动、关注技术博客和新闻,这些都是学习新知识和保持学习动力的途径。

提高编码水平需要不断的实践、学习和尝试。相信每位小伙伴都能成为一名优秀开发者,并能够创造出更好、更高效的代码。文章来源地址https://www.toymoban.com/news/detail-754741.html

到了这里,关于【C#】接口定义和使用知多少的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地之openai接口平替

    ------------恢复内容开始------------ 在上一篇文章中我们大致讲述了一下如何通过词嵌入向量的方式为大语言模型增加长期记忆,用于落地在私域场景的问题。其中涉及到使用openai的接口进行词嵌入向量的生成以及chat模型的调用 由于众所周知的原因,国内调用openai接口并不友好

    2024年02月06日
    浏览(58)
  • C#中LINQ的使用知多少?LINQ常功能整理,实例源代码解析

      LINQ(Language-Integrated Query)是C#语言中的一个强大的查询技术,它提供了一种统一的查询语法,可以用于查询和操作各种数据源,包括集合、数据库、XML等。下面详细描述了LINQ的20个功能点,并提供了相应的源代码。 查询集合中的所有元素: 使用条件过滤集合中的元素:

    2024年02月05日
    浏览(53)
  • 【go语言】3.1.2 接口的定义和实现

    在 Go 中,接口是一种抽象类型,用来描述其他类型应该有哪些方法。它定义了一组方法,但没有实现。这些方法由其他类型实现。 接口定义的格式如下: 例如,我们可以定义一个  Shape  接口,如下所示: 这个  Shape  接口定义了两个方法: Area  和  Perimeter ,分别用于计

    2024年02月15日
    浏览(43)
  • 基于C#的AE二次开发之IQueryFilter接口、ISpatialFilter接口、IQueryDef 接口的查询接口的介绍

    一、开发环境 开发环境为ArcGIS Engine 10.2与Visual studio2010。在使用ArcEngine查询进行查询的时候主要使用三种查询接口IQueryFilter(属性查询) 、ISpatialFilter(空间查询) 、IQueryDef (多表查询) 那么这三个接口的区别是什么呢? 要求 IQueryFilter ISpatialFilter IQueryDef 属性约束 True Tr

    2024年02月07日
    浏览(37)
  • 每个.NET开发都应掌握的C#接口知识点

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

    2024年02月13日
    浏览(46)
  • C#利用自定义特性以及反射,来提大型项目的开发的效率

      在大型项目的开发过程中,需要多人协同工作,来加速项目完成进度。 比如一个软件有100个form,分给100个人来写,每个人完成自己的Form.cs的编写之后,要在Mainform调用自己写的Form。 如果按照正常的Form form1 = new Form()这种写法来构造窗口的话,相当于每个人都要改动Mainfo

    2024年02月14日
    浏览(43)
  • 【05】STM32·HAL库开发-C语言基础知识 | stdint.h介绍 | 位操作 | 宏定义的使用 | 条件编译 | extern声明 | typdef使用 | 结构体、指针、代码规范介绍。

      stdint.h 是从 C99 中引进的一个标准 C 库的文件,可以在MDK5的安装路径:D:MDK5.34ARMARMCCinclude中找到。   stdint.h 定义了很多类型别名,将有符号的char类型定义别名为int8_t等,使用此套别名有易于移植。   在MDK中需要配置才能支持使用S99标准, 默认是勾选的 。   只

    2024年02月08日
    浏览(44)
  • 【sgCreateAPI】自定义小工具:敏捷开发→自动化生成API接口脚本(接口代码生成工具)

      具体步骤:登录 Apifox https://app.apifox.com/   圈选复制上面的内容粘贴到【接口地址列表】输入框,自动生成脚本代码 生成的接口请求代码是基于 【Vue.js最新版】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本_你挚爱的强哥的博客-CSDN博客 【代码】【最新版】【基于j

    2024年02月09日
    浏览(57)
  • java prometheus 自定义exporter开发,以及实现多个接口返回metrics

      exporter的作用是采集需要监控的数据,并将采集到的数据转换成prometheus所需要的数据格式,将这些转换后的数据返回,供给prometheus 使用。 java 编写自定义exporter所需要的pom.xml: exporter的四类指标说明 数据类型 解释 Counter Counter类型代表一种样本数据单调递增的指标,即

    2023年04月08日
    浏览(58)
  • idea插件开发-自定义语言00-开发导航

     源码 Initial Setup(初始化设置) ​​Registering a File Type​​​ :注册文件类型要实现一个自定义的语言必须要实现的,​​示例代码​​ ​​Implementing Lexer实现​​ :实现编程语言的语法分析器,​​示例代码​​ ​​Implementing Parser and PSI​​​:实现一个词法分析器

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包