C#中接口的好处,和抽象方法的的好处

2024-12-01 22:29:49
推荐回答(4个)
回答1:

我来说几句吧。

1,接口是稳定不变的。
如我预先定义一个接口为小狗:
public interface IDog
{
void Bark();
}

public class MyDoc: IDog
{
public void Bark()
{
Console.WriteLine("wang, wang");
}
}

如果你的小狗某天会飞了。
就成了
public class MyDoc: IDog
{
public void Bark()
{
Console.WriteLine("wang, wang");
}

public void Fly()
{
Console.WriteLine("Flying now");
}
}

一般的情况下我们不去扩张原来的接口IDog,你也可以看得出把Fly方法放入IDog是不合理的(不是所有的小狗都会飞)。这时候你应该定义新接口给Fly方法。

public interface IFlyable
{
void IFlyable();
}

然后MyDog的实现应该是:

public class MyDoc: IDog, IFlyable
{
public void Bark()
{
Console.WriteLine("wang, wang");
}

public void Fly()
{
Console.WriteLine("Flying now");
}
}

2. 这样的好处是什么呢?
比如我在某个地方用到MyDog,如MyHouse。
直接放入MyDog会怎么样?

public class MyHouse
{
MyDog _dog = null;
public MyHouse(MyDog dog)
{
_dog = dog;
}

//有人进来,狗叫
public void ComeIn()
{
_dog.Bark();
}

//拍电影
public void ShootAMovie()
{
_dog.Fly();
}
}

但有一天需求改变了。(软件里面需求改变是正常的)要求换你的狗而不是我的狗,
public class YourDog: IDog, IFlyable
{
public void Bark()
{
Console.WriteLine("wang, wang");
}

public void Fly()
{
Console.WriteLine("Flying now");
}
}

MyHouse你怎么办?重新实现一遍?你原来的MyHouse其实还有一个坏处是“与你的MyDog是紧密耦合的”。当代软件不够灵活的地方就在于紧耦合,而接口正是解决这种情况的灵丹妙药。
所以你一开始就不应该让MyHouse和MyDog紧密耦合,应该对接口进行编程,如下:
public class MyHouse
{
IDog _dog = null;
IFlyable _flyer = null;

public MyHouse(IDog dog, IFlyable flyer)
{
_dog = dog;
_flyer = flyer;
}

//有人进来,狗叫
public void ComeIn()
{
_dog.Bark();
}

//拍电影
public void ShootAMovie()
{
_flyer.Fly();
}
}

这样无论你是传MyDog或者YourDog都可以的,如下构造
MyHouse house = new MyHouse(new MyDog(), new MyDog());
MyHouse house = new MyHouse(new YourDog(), new YourDog());
甚至我们可以让MyDog在ComeIn里面叫唤,让YourDog在ShootAMovie里面拍电影,像如下构造
MyHouse house = new MyHouse(new MyDog(), new YourDog());

就说这么多吧。

回答2:

1.你可以让一个类多个接口,但是你只能继承自一个基类,变相的实现了多继承

2.接口可以让程序的耦合度减少。例如抽象工厂就是很好的例子。

3.接口可以方便团队开发。类与类通过接口通信,让开发和维护变得简单。

还有很多!不过好像都是为了多态而存在的!!

回答3:

更好的支持多态呀
而且接口是支持多重继承的

回答4:

看完大话设计模式前几章,就会了解