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

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 
http://www.xdnf.cn/news/1915.html

相关文章:

  • 初识HashMap
  • 华为L410上制作内网镜像模板:在客户端配置模板内容
  • 施工配电箱巡检二维码应用
  • 【EDA】EDA中聚类(Clustering)和划分(Partitioning)
  • STM32F103C8T6信息
  • 【金仓数据库征文】-不懂数据库也能看懂!一文解析金仓技术介绍以典型应用
  • 力扣-206.反转链表
  • 2025最新版扣子(Coze)AI智能体应用指南
  • 118. 杨辉三角
  • c++——内部类
  • AI 开发入门之 RAG 技术
  • 解析Mqtt 消息服务质量Qos
  • 2025最新软件测试面试八股文(答案+文档+视频讲解)
  • linux 桌面环境
  • 如何用大模型技术重塑物流供应链
  • 【C++基础知识】C++类型特征组合:`disjunction_v` 和 `conjunction_v` 深度解析
  • linux centOS7.9 No package docker-ce available
  • 解决 Windows10 下 UWP 应用无法使用本地代理
  • Python实现技能记录系统
  • 建筑安全员考试科目有哪些
  • 从梯度消失到百层网络:ResNet 是如何改变深度学习成为经典的?
  • 三维扫描|用高精度3D数据驱动制造企业降本增效
  • 循环神经网络RNN(示例代码LSTM预测股价示例)
  • 【硬核干货】SonarQube安全功能
  • 上篇:深入剖析 BLE 底层物理层与链路层(约5000字)
  • FreeRTOS【2】任务、优先级知识重点
  • 【C语言】C语言结构体:从基础到高级特性
  • 深入解析 doas:有望替代 sudo 的极简权限管理工具
  • Dify快速入门之发布应用
  • Trae 编程工具 Cline 插件安装与 Claude 3.7 API Key 自定义配置详解