C# 接口(Interface)学习笔记

什么是接口?

C# 中的接口是一种约定,它定义了类或结构体应该实现的成员。接口可以包含方法、属性、索引器和事件等。

与抽象类不同,接口不能直接实例化,而必须由实现其成员的类或结构体来实现。一个类或结构体可以实现多个接口,并且接口之间可以继承。

如何定义接口?

在 C# 中,使用 interface 关键字定义接口,如下所示:

csharpCopy Code
public interface IMyInterface { void Method1(); // 定义方法 int MyProperty { get; set; } // 定义属性 }

如何实现接口?

要实现一个接口,需要使用 classstruct 来声明一个类或结构体,并使用 : 运算符来指定该类或结构体实现的接口,如下所示:

csharpCopy Code
public class MyClass : IMyInterface { public void Method1() { Console.WriteLine("Method1"); } public int MyProperty { get; set; } }

接口实例

一个常见的使用接口的场景是进行依赖注入。考虑下面这个例子:

csharpCopy Code
public interface ILogger { void Log(string message); } public class ConsoleLogger : ILogger { public void Log(string message) { Console.WriteLine(message); } } public class MyClass { private readonly ILogger _logger; public MyClass(ILogger logger) { _logger = logger; } public void DoSomething() { _logger.Log("DoSomething called"); } }

在上面的例子中,我们定义了一个 ILogger 接口和一个实现该接口的 ConsoleLogger 类。然后,我们在 MyClass 中使用依赖注入,将一个实现了 ILogger 接口的对象传入 MyClass 的构造函数中。

这种方式可以让我们在运行时决定使用哪个实现了 ILogger 接口的类来进行日志记录。例如,如果我们想要将日志输出到文件中,我们可以编写一个实现 ILogger 接口的类,将其用作参数传入 MyClass 的构造函数中即可。

总结

接口是 C# 中非常重要的一种语言特性,它允许程序员定义类或结构体应该实现的成员,并促进代码重用和松耦合。通过实现接口,我们可以轻松地实现依赖注入等设计模式,从而使我们的代码更加灵活和可扩展。