接口:接口的概念简单来说就是一种契约(合同),接口主要约定合同的内容(双方如何"干活的问题"),接口将来要被类来继承类继承接口后,主要负责"怎么实现合同中约定的内容".接口====合同 类===遵守合同的人
接口通过关键字Interface,接口的名称一般约定以I,为了开发者阅读代码方便.接口必须等待其他类来实现(继承),结构也可以继承接口(不常用).接口能继承其他的接口,必须要靠一个类来实现.接口支持多继承,类只能有一个父类却能够拥有多个接口,接口支持多继承.接口去继承接口可以认为是把父接口中的方法克隆了一份放到了本接口.
接口的定义:
public Interface interface
{
public void add(int a,int b,int c);
}
接口中可以存在静态方法与虚方法,但是不建议定义
namespace ConsoleApp1
{
// 接口和抽象类比较像,都是等着其他类来实现接口或者抽象类的。
// 当只有少数方法,使用抽象类即可。
// 有大量的方法,建议使用接口。
// 抽象类首先是个类,用class关键字配合abstract关键字来定。
// 而接口是一种新的类型,使用interface关键字来定义。
// 接口默认就是公开的,public修饰符可以省略
public interface IMyInterface1
{
// 接口中只能定义属性,方法,索引器,事件这些成员。
public virtual void Add(int x, int y)
{
Console.WriteLine($"接口中结果:{x + y}");
}
public static void Sub() { }
// 上面的方法实现,虚方法,静态方法,虽然可以在接口中定义,但不建议,没有意义。
// 抽象类中的方法不能实现(不能有方法体)。接口中的方法可以实现,但不建议实现。
// 接口中的方法默认是公开的。可以省略。
void Add(int x, int y, int z);
}
}
,因为没有意义,接口中的方法可以实现但是不建议实现,抽象类中的方法不能实现(不能有方法体).
//多继承
public interface ICalc : IAdd, ISub
{
void Mul(int x, int y);
void Div(int x, int y);
}
实现一个接口必须要实现接口中所有(没有实现的)方法.接口中已经有实现的方法,不能继承.显示实现会标注方法来源于哪个接口.
public class MyClass1 : IMyInterface2
{
// 显示实现:标注方法是哪个接口中方法
/*void IMyInterface1.Add(int x, int y, int z)
{
throw new NotImplementedException();
}
void IMyInterface2.Sub(int x, int y)
{
throw new NotImplementedException();
}
void IMyInterface2.Sub(int x, int y, int z)
{
throw new NotImplementedException();
}*/
// 隐式实现:建议用这种。
public void Add(int x, int y, int z)
{
Console.WriteLine($"IMyInterface1中的Add结果:{x + y + z}");
}
public void Sub(int x, int y)
{
Console.WriteLine($"IMyInterface2中的Sub结果:{x - y}");
}
public void Sub(int x, int y, int z)
{
Console.WriteLine($"IMyInterface2中的Sub结果:{x - y - z}");
}
}