我何时应该使用接口,何时应该使用基类?
如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?
如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.
我经常听到/阅读基于接口的编程,但我并不清楚这究竟意味着什么.基于接口的编程是一个真正独立的主题,实际上有关于它的书籍吗?如果是这样,有人可以推荐任何好的吗?
我遇到了基于接口的编程,因为我正在阅读有关如何设计好API并希望了解它的更多信息.现在我不清楚如何正确地设计围绕接口的API.
任何信息都非常感谢.
我仍然无法理解哪些接口有益.我阅读了一些教程,但我仍然不知道它们的真正含义是"他们让你的课程保持承诺"和"他们帮助多重继承".
多数民众赞成.我仍然不知道什么时候甚至可以在实际工作示例中使用接口,甚至何时确定何时使用它.
根据我对接口的有限知识,他们可以提供帮助,因为如果某些东西实现了它,那么你可以通过接口允许传入类似不同的类,而不必担心它不是正确的参数.
但是我从来不知道真正的意义是什么,因为他们通常在这一点上停止显示代码在通过界面后会做什么,如果他们这样做,似乎他们没有做任何有用的事情,我可以看看并去"哇,他们会在现实世界的例子中帮助".
所以我想我要说的是我正在尝试找到一个真实世界的例子,我可以看到界面在行动.
我也不明白你可以做像这样的对象的引用:
ICalculator myInterface = new JustSomeClass();
Run Code Online (Sandbox Code Playgroud)
所以现在如果我去myInterface点和intellisense会拉起来我只会看到接口方法而不是JustSomeClass中的其他方法.所以我还没有看到这一点.
我也开始进行单元测试,他们似乎喜欢使用接口,但我仍然不明白为什么.
比如这个例子:
public AuthenticationController(IFormsAuthentication formsAuth)
{
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
}
public class FormsAuthenticationWrapper : IFormsAuthentication
{
public void SetAuthCookie(string userName, bool createPersistentCookie)
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
public IFormsAuthentication FormsAuth
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
喜欢为什么要打扰这个界面呢?为什么不使用其中的方法制作FormsAuthenticationWrapper并将其称为一天?为什么首先创建一个接口然后让Wrapper实现接口然后最后编写方法?
然后我不明白这句话真的在说什么.
就像我现在知道声明说的那样
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
Run Code Online (Sandbox Code Playgroud)
如果formsAuth为null,则创建一个新的FormsAuthenticationWrapper,然后将其分配给作为Interface的属性.
我想这可以追溯到为什么参考的东西.特别是在这种情况下,因为所有方法都完全相同.Wrapper没有接口没有的任何新方法,我不确定但是当你这样做时,方法被正确填充(即它们有一个体),它们不会被转换为存根,因为这看起来真的没有意义对我来说(它将被转换回界面).
然后在测试文件中他们有:
var formsAuthenticationMock = new Mock<AuthenticationController.IFormsAuthentication>();
Run Code Online (Sandbox Code Playgroud)
所以他们只是传递FormsAuthentication,我猜测所有的假存根.我猜测程序实际运行时会使用包装类,因为它有真正的方法可以执行某些操作(比如签署一个人).
但是看看新的Mock(来自moq)它会接受一个类或一个接口.为什么不再让包装类把那些方法放进然后在新的Mock调用中呢?
这不只是为你制作存根吗?
在用PHP编写对象时,我总是很难理解Interfaces的真正价值(可能是我想象的其他语言)
根据我的理解,你使用一个Interface来强制或保证当一个类使用Interface该类时,该类将具有在Interface该类内部定义的方法.
因此,根据我对使用它们的小知识,这并不意味着Interface在定义超过1个需要这些方法的类时,您只会找到一个有益的东西吗?
更清楚的是,如果我有一个类做了一件事而没有其他类需要做那样的事情,那么Interface在那个类上使用它是没有意义的吗?
所以你不会Interface在每个课上使用一个对吗?
PS)如果你投票这个问题,exact duplicate那么你没有阅读问题,只有标题,因为我已经阅读了大部分类似的问题
可能重复:
接口:为什么我似乎无法掌握它们?
我为什么要使用接口?
我认为这个问题重复了1000次,我很抱歉再次提问.我真的在寻找一个简单的简单答案,为什么我明确需要接口,或者如果你请解释一些我没有接口就无法实现的东西.
如果它是多重继承,那么我会请你给我一个简单的例子,通过它我可以理解为什么我需要接口.
- 提前.
注意:我在.NET(C#)语言的上下文中提出这个问题
编辑1:现在,每当我尝试学习界面时,我的思绪告诉我 - >"伙计你要用白纸勾勒出某人的身体"但是你还需要另一张白纸,你需要再次绘制轮廓,绘制所有身体部位填充颜色给他们以获得真实的图片".那么为什么我只是为了获得轮廓而浪费第一张白纸.