在继承中,派生类可以拿到基类的方法,若是派生类很多,且有时某部分派生类的部分实现逻辑是一样的,但其他的派生类又用不到,这个时候这些逻辑若是全部写到派生类中,就会导致产生很多的重复逻辑,但是若是写到基类中就会导致其他用不到当前逻辑的派生类也能调用,这样就会导致代码维护出现了问题。由此产生了接口。
在C#中只能进行单继承,也就是说一个类有且只有一个基类,但可以继承多个接口。
接口就是将部分逻辑独立出来。
// 可以直接调用Penguin中的成员变量,但想要调用接口中的函数需要对类型进行进行转换。
Animal a = new Penguin();
((IRun)a).Run();
string a_Name = a.Name;
// 可以直接调用Penguin中的成员变量和接口中的函数。
Penguin b = new Penguin();
b.Run();
string b_Name = b.Name;
// 可以直接调用接口中的函数但调用Penguin中的成员变量时需要将类型进行转换。
IRun c = new Penguin();
c.Run();
string c_Name = ((Penguin)c).Name;
class Animal {
public string Name;
public int Age;
public int Weight;
}
// 跑
interface IRun {
void Run();
}
// 飞
interface IFly {
void Fly();
}
// 游
interface ISwim {
void Swin();
}
class Penguin : Animal, IRun {
public void Run() {
Console.WriteLine("企鹅的跑函数");
}
}
class Sparrow : Animal, IRun {
public void Run() {
Console.WriteLine("麻雀的跑函数");
}
}
class wildGoose : Animal, IRun, IFly, ISwim {
public void Fly() {
Console.WriteLine("大雁的飞函数");
}
public void Run() {
Console.WriteLine("大雁的跑函数");
}
public void Swin() {
Console.WriteLine("大雁的游函数");
}
}