### C#接口学习总结 #### 一、接口概念与作用 在C#中,接口是一种特殊的抽象类型,它由一组签名组成,这些签名定义了一组方法、属性、索引器和事件,但不包含任何实现细节。接口的主要作用是定义了一个类必须遵循的行为规范,即实现了接口的类必须提供具体的实现代码。 #### 二、接口的定义与实现 在上述示例中,我们定义了两个接口`Observer`和`Subject`。 ##### 2.1 Observer接口 ```csharp public interface Observer { void Response(); // 观察者的反应,如老鼠要跑,人被吵醒 } ``` `Observer`接口定义了一个名为`Response`的方法,用于描述观察者接收到事件后的反应行为。在本例中,观察者可以是老鼠或人。 ##### 2.2 Subject接口 ```csharp public interface Subject { void AimAt(Observer obs); // 针对哪些观察者,比如老鼠或人 } ``` `Subject`接口定义了一个名为`AimAt`的方法,用于指定哪些观察者将接收到事件通知。在这个例子中,主体是猫,它可以瞄准老鼠或者人进行通知。 #### 三、具体类的实现 接下来,我们定义了几个具体类来实现这两个接口,并展示如何使用它们。 ##### 3.1 CMouse类 ```csharp public class CMouse : Observer { public string name; public CMouse(string m_name, Subject subj) { name = m_name; subj.AimAt(this); } public void Response() { Console.WriteLine(name + "想要逃跑!"); } } ``` `CMouse`类实现了`Observer`接口,并重写了`Response`方法。当被瞄准后,这个类会响应并输出老鼠想要逃跑的信息。 ##### 3.2 CCat类 ```csharp public class CCat : Subject { private ArrayList observers; public CCat() { this.observers = new ArrayList(); } public void AimAt(Observer obs) { observers.Add(obs); // 将观察者添加到列表中 } public void Cry() { Console.WriteLine("猫大叫一声!"); foreach (Observer obss in observers) { obss.Response(); } } } ``` `CCat`类实现了`Subject`接口,并重写了`AimAt`方法来添加观察者,以及`Cry`方法来触发事件。当猫大叫时,它会遍历所有已注册的观察者,并调用它们的`Response`方法。 ##### 3.3 CMaster类 ```csharp public class CMaster : Observer { public CMaster(Subject subj) { subj.AimAt(this); } public void Response() { Console.WriteLine("被惊醒"); } } ``` `CMaster`类同样实现了`Observer`接口,当被瞄准后,它会响应并输出“被惊醒”的信息。 #### 四、Main方法中的使用 ```csharp class Program { static void Main(string[] args) { CCat cat = new CCat(); // 定义一个猫对象 CMouse mouse1 = new CMouse("mouse1", cat); // 定义一个老鼠1 CMouse mouse2 = new CMouse("mouse2", cat); // 定义一个老鼠2 CMaster master = new CMaster(cat); // 定义一个主人 cat.Cry(); // 猫叫一声,触发整个过程 } } ``` 在主函数中,首先创建了一个猫的对象,并通过构造函数为每只老鼠和主人注册了事件。当猫发出叫声时,所有注册的观察者都会接收到事件并做出相应的反应。 #### 五、总结 本例展示了如何在C#中使用接口来设计和实现观察者模式。通过这种方式,我们可以灵活地扩展程序的功能,而不需要修改现有代码。接口不仅提供了代码的可重用性,还增强了系统的灵活性和可维护性。在实际开发中,合理地利用接口可以有效地提升软件架构的设计水平和程序的健壮性。
- 粉丝: 3
- 资源: 35
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip