接口保证一组给定的方法将被实现。接口本身并不关心代码将如何实现。与扩展类相反,当您扩展一个类时,您使用的是一些预定义的代码。
如果你用相同的方法扩展两个类,比如methodA,并调用这个方法,那么编译器将不知道它需要运行哪一个。另一方面,当您使用相同的方法实现两个接口时,由于实现是在您自己的代码中编写的,编译器会知道它需要去哪里找到实现。
因此,基本上,当您实施某些东西时,您就可以保证您将提供一些服务。
编辑:我会尝试以您的示例并以某种面向对象的方式将其转换,这有望使事情变得更清晰。
Jack 和 Ben 会保证他们会借给你钱,而另一方面,你保证会偿还,所以,从 OO 的角度来看,你可以这样看:
public interface IPay
{
public void Pay(Individual i);
}
public class MySelf : IPay
{
public void Pay(Individual i)
{
...
}
}
public interface ILend
{
public void Lend(Individual i);
}
public class Jack : ILend //Same applies for Ben
{
public void Lend(Individual i)
{
...
}
}
这就是我将如何处理您指定的问题。
至于另一个垃圾示例,您可以这样做:
public interface ITakeTrash
{
public void TakeTrash(Trash t);
}
public Son : ITakeTrash
{
public void TakeTrash(Trash t);
}
public class Mum //Same applies for dad
{
Son mySon = ...
mySon.TakeTrash(t);
}
你的父母不知道如何处理垃圾,但是,他们知道你知道如何处理它,这就是他们关心的(就像上面一样,你只关心 Ben 和 Jack 能不能给你钱,而其他方只关心你能不能还钱,所涉及的人真的都不在乎你是怎么做的。
我确实了解您的目标,基本上是说如果我使用具有相同名称的方法实现两个不同的接口来执行不同的操作。如果您最终陷入这种情况,我认为那是由于设计不当造成的。我不建议建立一个做无数不同事情的类,这是原因之一。
另一方面,您可能会问,如果我有 2 个接口用同名的方法做类似的事情怎么办?然后,我认为答案是,由于接口 做 类似的事情,并且你有同名的方法,很可能你正在做同样的事情,因此,你不需要把自己弄糊涂了。
我希望这次编辑有助于阐明这个问题。