C# 接口(Interface)学习笔记
什么是接口?
C# 中的接口是一种约定,它定义了类或结构体应该实现的成员。接口可以包含方法、属性、索引器和事件等。
与抽象类不同,接口不能直接实例化,而必须由实现其成员的类或结构体来实现。一个类或结构体可以实现多个接口,并且接口之间可以继承。
如何定义接口?
在 C# 中,使用 interface
关键字定义接口,如下所示:
csharpCopy Codepublic interface IMyInterface
{
void Method1(); // 定义方法
int MyProperty { get; set; } // 定义属性
}
如何实现接口?
要实现一个接口,需要使用 class
或 struct
来声明一个类或结构体,并使用 :
运算符来指定该类或结构体实现的接口,如下所示:
csharpCopy Codepublic class MyClass : IMyInterface
{
public void Method1()
{
Console.WriteLine("Method1");
}
public int MyProperty { get; set; }
}
接口实例
一个常见的使用接口的场景是进行依赖注入。考虑下面这个例子:
csharpCopy Codepublic 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# 中非常重要的一种语言特性,它允许程序员定义类或结构体应该实现的成员,并促进代码重用和松耦合。通过实现接口,我们可以轻松地实现依赖注入等设计模式,从而使我们的代码更加灵活和可扩展。