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

C#高级语法--接口

先引用一些通俗一点的话语说明

1. 接口就像“插座标准”(解耦)

🧩 场景

  • 你家的手机充电器(USB-C、Lightning)必须插进匹配的插座才能充电。
  • 问题:如果每个手机品牌插座都不一样,你换手机就得换充电器,太麻烦了!

💡 接口的作用

    • 定义一个通用的充电口标准(比如USB-C),所有手机厂商(华为、小米、苹果)只要按这个标准做充电口,你就能用同一根线充电。
// 定义“充电标准”接口 
public interface ICharger 
{void Charge();
}// 华为手机实现接口 
public class Huawei : ICharger 
{public void Charge() => Console.WriteLine("华为快充中...");
}// 苹果手机实现接口 
public class iPhone : ICharger 
{public void Charge() => Console.WriteLine("苹果慢充中...");
}// 用户只需要一个充电器,不管手机品牌 
ICharger phone1 = new Huawei();
ICharger phone2 = new iPhone();
phone1.Charge();  // 输出:华为快充中...
phone2.Charge();  // 输出:苹果慢充中...

✅ 好处

换手机不用换充电器(代码里换实现类,不用改其他代码)。

2. 接口就像“任务清单”(多态)

🧩 场景

  • 公司老板让员工做任务,但不同员工(程序员、设计师)完成任务的方式完全不同。
  • 问题:如果老板要针对每个人写不同的指令,累死人!

💡 接口的作用

  • 老板只发一个统一的任务清单(接口),具体怎么做员工自己实现。
  • 代码示例
// 定义“任务”接口 
public interface ITask 
{void DoWork();
}// 程序员实现 
public class Programmer : ITask 
{public void DoWork() => Console.WriteLine("写代码...");
}// 设计师实现 
public class Designer : ITask 
{public void DoWork() => Console.WriteLine("画图...");
}// 老板只需要喊“干活”,不管是谁 
List<ITask> team = new List<ITask> { new Programmer(), new Designer() };
foreach (var person in team)
{person.DoWork(); 
}
// 输出:
// 写代码...
// 画图...

✅ 好处

老板不用管细节(代码只需调用接口,不用关心具体是谁实现的)。

3. 接口就像“快递柜”(依赖注入)

🧩 场景

  • 你网购时,快递可以放快递柜家门口驿站,但卖家不关心具体放哪。
  • 问题:如果卖家必须知道你家地址才能发货,太复杂了!

💡 接口的作用

  • 卖家只认“快递服务”接口,具体用哪家快递(顺丰、京东)由买家决定。
  • 代码示例
// 定义“快递服务”接口 
public interface IDelivery 
{void Send(string package);
}// 顺丰快递 
public class SFDelivery : IDelivery 
{public void Send(string package) => Console.WriteLine($"顺丰已发出:{package}"); 
}// 京东快递 
public class JDDelivery : IDelivery 
{public void Send(string package) => Console.WriteLine($"京东已发出:{package}");
}// 卖家只管发货,不关心快递公司 
public class Seller 
{private readonly IDelivery _delivery;// 构造函数传入快递服务(依赖注入)public Seller(IDelivery delivery) => _delivery = delivery;public void Sell(string product){_delivery.Send(product);}
}// 买家选择顺丰 
Seller seller = new Seller(new SFDelivery());
seller.Sell("iPhone 15"); // 输出:顺丰已发出:iPhone 15 

✅ 好处

卖家不用改代码,想换快递就换(比如换成new JDDelivery())。

4. 接口就像“游戏外挂”(插件系统)

🧩 场景

  • 你玩《原神》时,可以加模组(比如自动钓鱼),但游戏官方不用提前知道这些功能。
  • 问题:如果游戏每次更新都要内置所有功能,程序会超级臃肿!

💡 接口的作用

  • 游戏官方定义“插件接口”,玩家自己写模组,按接口规范加载。
  • 代码示例
// 游戏定义“插件”接口 
public interface IPlugin 
{void Run();
}// 玩家开发的“自动钓鱼”插件 
public class AutoFishingPlugin : IPlugin 
{public void Run() => Console.WriteLine("自动钓鱼中...");
}// 游戏启动时加载所有插件 
List<IPlugin> plugins = new List<IPlugin> { new AutoFishingPlugin() };
foreach (var plugin in plugins)
{plugin.Run(); // 输出:自动钓鱼中...
}

✅ 好处

游戏功能可以无限扩展,不用重新编译主程序。

总结:接口的4个核心作用

  1. 统一标准:像“USB插座”一样,让不同设备兼容。
  2. 简化调用:像“老板的任务清单”,不管员工怎么干,只管结果。
  3. 灵活替换:像“快递服务”,随时切换实现,不影响业务。
  4. 扩展功能:像“游戏模组”,动态增加新功能。

初学牢记
✅ 接口是“做什么”的约定(比如“充电”、“发货”)。
❌ 接口不关心“怎么做”(具体实现由类负责)。

这样理解是不是更简单了? 😉



接口的定义语法

[访问修饰符] interface IInterfaceName 
{// 成员声明(无实现)[成员签名];
}

示例:定义一个简单接口

public interface IAnimal 
{// 方法声明(无实现)void MakeSound();// 属性声明 string Name { get; set; }// 事件声明 event EventHandler OnHungry;
}

实现接口的示例

public class Dog : IAnimal 
{// 实现接口的属性 public string Name { get; set; }// 实现接口的方法 public void MakeSound(){Console.WriteLine("Woof!");}// 实现接口的事件 public event EventHandler OnHungry;
}

1. 跨平台数据存储(如数据库抽象)

场景:应用程序需要支持多种数据库(SQL Server、MySQL、Oracle),但业务逻辑不应依赖具体数据库实现。
接口设计

public interface IDatabaseRepository 
{void Connect(string connectionString);int ExecuteCommand(string sql);DataTable Query(string sql);
}

具体实现

public class SqlServerRepository : IDatabaseRepository 
{public void Connect(string connectionString) => Console.WriteLine("SQL Server connected");public int 

相关文章:

C#高级语法--接口

先引用一些通俗一点的话语说明 1. 接口就像“插座标准”(解耦) 🧩 场景: 你家的手机充电器(USB-C、Lightning)必须插进匹配的插座才能充电。问题:如果每个手机品牌插座都不一样,你换手机就得换充电器,太麻烦了!💡 接口的作用: 定义一个通用的充电口标准(比如U…...

5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架

5.6.1 Semantic Kernel概述 Microsoft Semantic Kernel&#xff08;以下简称SK&#xff09;是一个开源的软件开发工具包&#xff08;SDK&#xff09;&#xff0c;旨在帮助开发者将大型语言模型&#xff08;LLM&#xff09;无缝集成到现有的应用程序中。它支持C#、Python和Java…...

【尚硅谷Redis6】自用学习笔记

Redis介绍 Redis是单线程 多路IO复用技术&#xff08;类似黄牛买票&#xff09; 默认有16个库&#xff0c;用select进行切换 默认端口号为6379 Memcached&#xff1a;多线程 锁&#xff08;数据类型单一&#xff0c;不支持持久化&#xff09; 五大常用数据类型 Redis key …...

Vue里面elementUi-aside 和el-main不垂直排列

先说解决方法 main.js少导包 import element-ui/lib/theme-chalk/index.css; //加入此行即可 问题复现 排查了一个小时终于找出来问题了&#xff0c;建议导包去看官方的文档&#xff0c;作者就是因为看了别人的导包流程导致的问题 导包官网地址Element UI导包快速入门...

VS Code搭建C/C++开发环境

文章目录 一、VScode 是什么?二、VScode的下载和安装1、下载2、安装 三、环境介绍1、安装中文插件 四、VScode配置 C/C开发环境1、下载MinGW-w64 编译器套件2、配置MingGW643、验证4、安装C/C插件 五、在VSCode上编写C语言代码并编译成功1、打开文件夹2、新建C语言文件&#x…...

6.ArkUI Row的介绍和使用

ArkUI Row 组件介绍与使用指南 什么是 Row 组件&#xff1f; Row 是 ArkUI 中的基础布局容器组件&#xff0c;用于水平&#xff08;横向&#xff09;排列子组件。它与 Column 组件相对应&#xff0c;是构建用户界面最常用的布局方式之一&#xff0c;类似于其他UI框架中的水平…...

mysql 在 dbeaver中下载驱动失败处理

直接上解决方法 1. 在mysql官网下载驱动 2. 引入dbeaver中即可 3. 最后再双击即可...

Java 安全:如何防止 SQL 注入与 XSS 攻击?

Java 安全&#xff1a;如何防止 SQL 注入与 XSS 攻击&#xff1f; 在 Java 开发领域&#xff0c;安全问题至关重要&#xff0c;而 SQL 注入和 XSS 攻击是两种常见的安全威胁。本文将深入探讨如何有效防止这两种攻击&#xff0c;通过详细代码实例为您呈现解决方案。 一、SQL 注…...

fastbev mmdetection3D 角度和方向损失

角度/方向损失 sin(a−b)sinacosb−cosasinb config参数 dir_offset0.7854, # pi/4 dir_limit_offset0, box编解码 # Copyright (c) OpenMMLab. All rights reserved. import torchfrom mmdet.core.bbox import BaseBBoxCoder from mmdet.core.bbox.builder import BBOX_COD…...

力扣-hot100(滑动窗口最大值)

239. 滑动窗口最大值 困难 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums […...

一种专用车辆智能配电模块的设计解析:技术革新与未来展望

关键词&#xff1a;智能配电模块、STM32、CAN总线、电子开关、新能源汽车 引言&#xff1a;传统配电系统的痛点与智能化转型 传统配电系统依赖继电器和保险丝&#xff0c;存在体积大、寿命短、智能化低等缺陷&#xff08;如图1&#xff09;。而新能源汽车和无人驾驶技术对配电…...

《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​

ProtoBuf详解 1、初识ProtoBuf2、安装ProtoBuf2.1、ProtoBuf在Windows下的安装2.2、ProtoBuf在Linux下的安装 3、快速上手——通讯录V1.03.1、步骤1&#xff1a;创建.proto文件3.2、步骤2&#xff1a;编译contacts.proto文件&#xff0c;生成C文件3.3、步骤3&#xff1a;序列化…...

Java实现加密(七)国密SM2算法的签名和验签(附商用密码检测相关国家标准/国密标准下载)

目录 一、国密标准中&#xff0c;关于SM2签名验签的定义二、SM2签名和验签的实现原理1. 前置知识2. 签名生成过程3. 验签过程4. 数学正确性证明5. 安全性与注意事项 三、带userId、不带userId的区别1. 核心区别2.算法区别(1) 哈希计算过程(2) 签名验签流程 四、Java代码实现1. …...

【华为HCIP | 华为数通工程师】821—多选解析—第十七页

多选835、IS-IS协议所使用的NSAP地址主要由哪几个部分构成? A、AREA ID B、SEL C、DSCp D、SYSTEM ID 解析:NSAP地址:网络服务访问点(Network Service Access Point)是 OSI 协议中用于定位资源的地址。NSAP 的地址结构如图所示,它由 IDP(Initial Domain …...

函数的定义与使用(python)

lst[:]是传入lst的拷贝。改变它对原始lst没有任何影响。 *list一个*的元素在函数体内会被当成一个元组。 以下是对图中 Python 代码的详细解释&#xff1a; 代码总体功能 这段代码定义了一个生成器函数 getItem &#xff0c;用于依次返回多个列表中的元素。然后通过循环遍历…...

List findIntersection getUnion

List findIntersection & getUnion 求两个列表的交集和并集 package zwf;import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List;/*** 列表工具类* * author ZengWenFeng* date 2025.04.22* mobile 13805029595* email 117791303qq.com*/ p…...

乒乓操作(Ping-Pong)

乒乓操作 “ 乒乓操作” 是一个常常应用于数据流控制的设计思想&#xff0c; 典型的乒乓操作方法如下图 所示&#xff1a; ​ T1周期&#xff0c;输入数据流1缓存到数据缓冲模块1中&#xff0c;如上图棕色&#xff1b;T2周期&#xff0c;输入数据流2缓存到数据缓冲模块2中&…...

微信小程序文章管理系统开发实现

概述 在内容为王的互联网时代&#xff0c;高效的文章管理系统成为各类平台的刚需。幽络源平台今日分享一款基于SSM框架开发的微信小程序文章管理系统完整解决方案&#xff0c;该系统实现了多角色内容管理、智能分类、互动交流等功能。 主要内容 一、用户端功能模块 ​​多角…...

GrassRouter 小草MULE多5G多链路聚合通信路由设备在应急场景的聚合效率测试报告及解决方案

在应急通信场景中&#xff0c;快速、稳定、高效的通信链路是保障救援工作顺利开展的关键。MULE&#xff08;Multi-Link Unified Link Enhancement&#xff09;多链路聚合路由通信设备作为一种新型的通信技术解决方案&#xff0c;通过聚合多条通信链路&#xff08;如4G/5G、卫星…...

筑牢数字防线:商城系统安全的多维守护策略

一、构建网络安全防护屏障​ 网络安全是商城系统安全的第一道防线。企业应采用先进的防火墙技术&#xff0c;实时监控和过滤进出网络的流量&#xff0c;阻止非法访问和恶意攻击。入侵检测与防御系统&#xff08;IDS/IPS&#xff09;也是不可或缺的安全组件&#xff0c;它能够及…...

Linux阻塞与非阻塞I/O:从原理到实践详解

Linux阻塞与非阻塞I/O&#xff1a;从原理到实践详解 1. 阻塞与非阻塞I/O基础概念 1.1 阻塞与非阻塞简介 在Linux系统编程中&#xff0c;I/O操作可以分为两种基本模式&#xff1a;阻塞I/O和非阻塞I/O。这两种模式决定了当设备或资源不可用时&#xff0c;程序的行为方式。 阻…...

【MySQL】MySQL索引与事务

目录 前言 1. 索引 &#xff08;index&#xff09; 1.1 概念 1.2 作用 1.3 使用场景 1.4 索引的相关操作 查看索引 创建索引 删除索引 2. 索引背后的数据结构 2.1 B树 2.2 B&#xff0b;树的特点 2.3 B&#xff0b;树的优势 3. 事务 3.1 为什么使用事务 3.2 事…...

华为网路设备学习-19 IGP路由专题-路由策略

一、 二、 注意&#xff1a; 当该节点匹配模式为permit下时&#xff0c;参考if else 当该节点匹配模式为deny下时&#xff1a; 1、该节点中的apply子语句不会执行。 2、如果满足所有判断&#xff08;if-match&#xff09;条件时&#xff0c;拒绝该节点并跳出&#xff08;即不…...

力扣-234.回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 class Solution { public:bool isPalindrome(ListNode* head) {//快慢指针找到中间结点p1&#xff08;偶数个结点…...

Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战

本文基于 Spring Boot 2.7.x MyBatis Plus 3.5.9&#xff0c;演示如何通过 Lock4j 与 Redisson 实现高可靠的分布式锁方案&#xff0c;解决高并发场景下的资源竞争问题。 一、依赖配置关键点 1.1 Maven 依赖&#xff08;pom.xml&#xff09; <dependency><groupId&g…...

基于DrissionPage的表情包爬虫实现与解析(含源码)

目录 ​编辑 一、环境配置与技术选型 1.1 环境要求 1.2 DrissionPage优势 二、爬虫实现代码 三、代码解析 3.1 类结构设计 3.2 目录创建方法 3.3 图片链接获取 3.4 图片下载方法 四、技术升级对比 4.1 代码复杂度对比 4.2 性能测试数据 五、扩展优化建议 5.1 并…...

无限debugger实现原理

1. 直接调用 debugger 关键字 代码示例&#xff1a; debugger; // 手动触发调试器中断特点&#xff1a; 最简单的方式&#xff0c;直接插入 debugger 语句。若未在浏览器开发者工具中禁用断点&#xff0c;每次执行到此代码都会暂停。反制手段&#xff1a;可通过浏览器开发者…...

区间和数量统计 之 前缀和+哈希表

文章目录 1512.好数对的数目2845.统计趣味子数组的数目1371.每个元音包含偶数次的最长子字符串 区间和的数量统计是一类十分典型的问题&#xff1a;记录左边&#xff0c;枚举右边策略前置题目&#xff1a;统计nums[j]nums[i]的对数进阶版本&#xff1a;统计子数组和%modulo k的…...

全能 Sui 技术栈,构建 Web3 的未来

本文翻译自&#xff1a;FourPillarsFP&#xff0c;文章仅代表作者观点。 2025 年&#xff0c;SuiNetwork正在以一套全栈区块链策略强势出击&#xff0c;彻底打破加密行业的传统范式。正如 Mysten Labs 联合创始人 Adeniyi Abiodun 所说&#xff1a;“Sui 不只是一条区块链&…...

什么是爬虫?——从技术原理到现实应用的全面解析 V

什么是爬虫?——从技术原理到现实应用的全面解析 V 二十一、云原生爬虫架构设计 21.1 无服务器爬虫(AWS Lambda) # lambda_function.py import boto3 import requests from bs4 import BeautifulSoups3 = boto3.client(s3)def lambda_handler(event, context):# 抓取目标…...