接口的基本概念
-
定义接口 :
使用interface
关键字定义接口。接口中的成员默认是public
,不能有访问修饰符,也不能包含字段、构造函数或实现的方法,只能包含方法、属性、事件和索引器的声明。 -
实现接口 :
类使用:
冒号后接接口名来实现接口。如果一个类实现了接口,它必须实现接口中的所有成员。 -
接口的用途:
- 定义通用的操作,而不关心具体的实现。
- 实现多重继承的效果,因为一个类可以实现多个接口。
代码示例
定义接口
|---|--------------------------------|
| | public interface IAnimal
|
| | {
|
| | void Eat();
|
| | void Sleep();
|
| | }
|
实现接口
|---|----------------------------------------------|
| | public class Dog : IAnimal
|
| | {
|
| | // 实现接口中的方法
|
| | public void Eat()
|
| | {
|
| | Console.WriteLine("Dog is eating.");
|
| | }
|
| | |
| | public void Sleep()
|
| | {
|
| | Console.WriteLine("Dog is sleeping.");
|
| | }
|
| | }
|
| | |
| | public class Cat : IAnimal
|
| | {
|
| | // 实现接口中的方法
|
| | public void Eat()
|
| | {
|
| | Console.WriteLine("Cat is eating.");
|
| | }
|
| | |
| | public void Sleep()
|
| | {
|
| | Console.WriteLine("Cat is sleeping.");
|
| | }
|
| | }
|
使用接口
|---|---------------------------------------|
| | class Program
|
| | {
|
| | static void Main(string[] args)
|
| | {
|
| | IAnimal myDog = new Dog();
|
| | IAnimal myCat = new Cat();
|
| | |
| | myDog.Eat();
|
| | myDog.Sleep();
|
| | |
| | myCat.Eat();
|
| | myCat.Sleep();
|
| | }
|
| | }
|
接口的高级用法
-
接口的继承 :
接口可以继承其他接口,从而构建更复杂的接口层次结构。
|---|----------------------------------------------|
| |public interface IAdvancedAnimal : IAnimal
|
| |{
|
| |void Run();
|
| |}
|
| | |
| |public class Tiger : IAdvancedAnimal
|
| |{
|
| |public void Eat()
|
| |{
|
| |Console.WriteLine("Tiger is eating.");
|
| |}
|
| | |
| |public void Sleep()
|
| |{
|
| |Console.WriteLine("Tiger is sleeping.");
|
| |}
|
| | |
| |public void Run()
|
| |{
|
| |Console.WriteLine("Tiger is running.");
|
| |}
|
| |}
| -
显式接口实现 :
如果一个类实现了多个接口,而这些接口中有同名的方法,可以使用显式接口实现来避免冲突。
|---|--------------------------------------------------------|
| |public interface IFirst
|
| |{
|
| |void Show();
|
| |}
|
| | |
| |public interface ISecond
|
| |{
|
| |void Show();
|
| |}
|
| | |
| |public class MultiInterfaceClass : IFirst, ISecond
|
| |{
|
| |void IFirst.Show()
|
| |{
|
| |Console.WriteLine("IFirst Show");
|
| |}
|
| | |
| |void ISecond.Show()
|
| |{
|
| |Console.WriteLine("ISecond Show");
|
| |}
|
| |}
|
| | |
| |class Program
|
| |{
|
| |static void Main(string[] args)
|
| |{
|
| |MultiInterfaceClass obj = new MultiInterfaceClass();
|
| |((IFirst)obj).Show();
|
| |((ISecond)obj).Show();
|
| |}
|
| |}
|
总结
- 接口是一种定义契约的方式,确保实现类遵循特定的格局。
- 接口只包含成员的声明,不包含实现。
- 一个类可以实现多个接口,从而实现多重继承的效果。
- 接口可以继承其他接口。
- 显式接口实现用于解决接口方法冲突的问题。
通过理解和使用接口,你可以设计出更加灵活和可扩展的代码结构。希望这些讲解和示例对你理解C#中的接口有所帮助!