在C#中,接口(Interface)是一种定义了一组相关方法、属性和事件的合同。它定义了一组行为,而不关心实现细节。
使用 interface 关键字定义一个接口。
interface IShape
{
double CalculateArea();
void Display();
}
类可以通过使用 : 符号实现一个或多个接口。
class Circle : IShape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public double CalculateArea()
{
return Math.PI * radius * radius;
}
public void Display()
{
Console.WriteLine($"Circle with radius {radius}");
}
}
一个类可以实现多个接口,并提供每个接口定义的成员实现。
interface IPlayable
{
void Play();
}
interface IRecordable
{
void Record();
}
class Player : IPlayable, IRecordable
{
public void Play()
{
Console.WriteLine("Playing...");
}
public void Record()
{
Console.WriteLine("Recording...");
}
}
当一个类实现了多个接口,并且这些接口拥有相同的成员名称时,可以使用显式接口实现来解决命名冲突。
interface IFirstInterface
{
void Display();
}
interface ISecondInterface
{
void Display();
}
class MyClass : IFirstInterface, ISecondInterface
{
void IFirstInterface.Display()
{
Console.WriteLine("Displaying from IFirstInterface");
}
void ISecondInterface.Display()
{
Console.WriteLine("Displaying from ISecondInterface");
}
}
在C# 8.0及更高版本中,接口可以定义默认实现。
interface ILogger
{
void Log(string message);
// 默认实现
void LogError(string errorMessage)
{
Log($"[Error] {errorMessage}");
}
}
class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine($"[Info] {message}");
}
}