C# 接口(Interface)
C# 接口
C# 接口是面向对象编程语言中的一种重要的语言特性。接口定义了一组方法、属性和事件,这些方法、属性和事件可以由其他类实现然后提供自己的实现。接口定义了一种契约,规定了实现该接口的类必须实现哪些方法、属性和事件。这可以使得代码更加模块化,方便维护和升级。
接口的定义
接口的定义类似于类的定义,但是使用关键字 interface
来代替 class
。接口中不能包含字段或构造函数。
interface IExampleInterface
{
void Method1();
int Method2(string arg);
event EventHandler MyEvent;
}
在上面的接口定义中,我们定义了两个方法和一个事件。这些成员没有实现,只是定义了接口的契约。实现接口的类必须实现这些成员并提供自己的实现。
实现接口
要实现接口,需要在类声明时使用 : 例程名
的语法来表示该类实现了一个或多个接口。实现一个接口的同时,必须实现该接口中定义的所有方法、属性和事件。
class ExampleClass : IExampleInterface
{
public void Method1()
{
Console.WriteLine("Method1 called.");
}
public int Method2(string arg)
{
Console.WriteLine("Method2 called with arg {0}.", arg);
return arg.Length;
}
public event EventHandler MyEvent;
}
在上面的代码中,我们定义了一个实现 IExampleInterface
接口的类 ExampleClass
。该类必须提供实现接口所定义的方法、属性和事件。在该例中,类 ExampleClass
提供了 Method1
、Method2
和 MyEvent
事件的实现。
接口的继承
接口可以继承其他接口,这样新的接口就包含了从父接口继承的所有成员以及自己定义的成员。
interface IChildInterface : IExampleInterface
{
string Method3(double arg);
}
在上面的代码中,我们使用关键字 interface
定义了一个新的接口 IChildInterface
,该接口继承自 IExampleInterface
接口并且定义了一个新的方法 Method3
。类实现 IChildInterface
接口的同时,必须实现 IExampleInterface
接口中定义的所有成员以及 IChildInterface
自己定义的成员。
接口默认实现
自 C# 8.0 开始,接口可以包含默认实现。默认实现提供了一个在接口中实现方法的方式,这样实现该接口的类就不需要单独实现该方法。
interface IExampleInterfaceWithDefaultImplementation
{
int Method1()
{
return 42;
}
}
在上面的代码中,我们定义了一个接口 IExampleInterfaceWithDefaultImplementation
,该接口包含了一个默认实现的方法 Method1
。如果实现该接口的类没有提供 Method1
的实现,就会使用默认实现。
接口显式实现
有时候一个类可能同时实现多个接口,并且这些接口中有些成员拥有相同的名称。这时就可以使用接口显式实现来明确地指明实现哪个接口的方法。
interface I1
{
void Method();
}
interface I2
{
void Method();
}
class ExampleClass : I1, I2
{
void I1.Method()
{
Console.WriteLine("I1.Method called.");
}
void I2.Method()
{
Console.WriteLine("I2.Method called.");
}
}
在上面的代码中,我们定义了一个实现 I1
和 I2
接口的类 ExampleClass
。该类使用接口显式实现来实现 I1.Method
和 I2.Method
方法。
结论
接口是 C# 中一个非常重要的语言特性,可以使得代码更加模块化,方便维护和升级。本文介绍了如何定义接口、实现接口、继承接口、接口默认实现以及接口显式实现等内容。