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

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 

相关文章:

  • 前端如何连接tcp 服务,接收数据
  • 服务器集群都有哪些优势?
  • 电子病历高质量语料库构建方法与架构项目(提示词设计篇)
  • OAuth2TokenEndpointFilter类介绍、应用场景和示例代码
  • 89.WPF 中实现便捷的数字输入框:DecimalUpDown 控件的使用 WPF例子 C#例子.
  • 新!在 podman-machine-default 中安装 CUDA、cuDNN、Anaconda、PyTorch 等并验证安装
  • PyCharm 中 FREECAD 二次开发:从基础建模到深度定制
  • fpga系列 HDL:verilog latch在fpga中的作用 避免latch的常见做法
  • 可以在电脑上使用的备忘录记事工具评测
  • 第2讲:R语言中的色彩美学——科研图表配色指南
  • 爬虫练习 js 逆向
  • c++进阶——类与继承
  • 牛客小白月赛115-B题:签到题
  • Hot100方法及易错点总结2
  • 1.2-1.3考研408计算机组成原理第一章 计算机系统概述
  • Java 安全:如何防止 DDoS 攻击?
  • 广安理工学院(暂定名)华清远见校企合作签约揭牌,共建实习实训基地
  • 软考中级-软件设计师 知识点速过1(手写笔记)
  • Android FFmpeg 交叉编译全指南:NDK编译 + CMake 集成
  • 告别默认配置!Xray自定义POC开发指南
  • 邮轮、无人机、水上运动……上海多区推动文旅商体展融合发展
  • 生于1984年,马玥已任辽宁锦州北镇市代市长
  • 董明珠的接班人还是董明珠
  • 男粉丝咬伤女主播嘴后写的条子引争议:赔偿“十万元”还是“十5元”?
  • IMF将今年全球经济增长预期由3.3%下调至2.8%
  • 《哪吒2》票房已达157亿,光线传媒一季度净利增至20亿元