相关疑难解决方法(0)

接口与基类

我何时应该使用接口,何时应该使用基类?

如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?

如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.

language-agnostic oop static-typing interface base-class

754
推荐指数
17
解决办法
15万
查看次数

究竟什么是"基于接口的编程"?

我经常听到/阅读基于接口的编程,但我并不清楚这究竟意味着什么.基于接口的编程是一个真正独立的主题,实际上有关于它的书籍吗?如果是这样,有人可以推荐任何好的吗?

我遇到了基于接口的编程,因为我正在阅读有关如何设计好API并希望了解它的更多信息.现在我不清楚如何正确地设计围绕接口的API.

任何信息都非常感谢.

.net c# design-patterns interface

18
推荐指数
3
解决办法
9707
查看次数

了解接口

我仍然无法理解哪些接口有益.我阅读了一些教程,但我仍然不知道它们的真正含义是"他们让你的课程保持承诺"和"他们帮助多重继承".

多数民众赞成.我仍然不知道什么时候甚至可以在实际工作示例中使用接口,甚至何时确定何时使用它.

根据我对接口的有限知识,他们可以提供帮助,因为如果某些东西实现了它,那么你可以通过接口允许传入类似不同的类,而不必担心它不是正确的参数.

但是我从来不知道真正的意义是什么,因为他们通常在这一点上停止显示代码在通过界面后会做什么,如果他们这样做,似乎他们没有做任何有用的事情,我可以看看并去"哇,他们会在现实世界的例子中帮助".

所以我想我要说的是我正在尝试找到一个真实世界的例子,我可以看到界面在行动.

我也不明白你可以做像这样的对象的引用:

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调用中呢?

这不只是为你制作存根吗?

.net c# asp.net-mvc interface

16
推荐指数
4
解决办法
5904
查看次数

何时在PHP中使用接口

在用PHP编写对象时,我总是很难理解Interfaces的真正价值(可能是我想象的其他语言)

根据我的理解,你使用一个Interface来强制或保证当一个类使用Interface该类时,该类将具有在Interface该类内部定义的方法.

因此,根据我对使用它们的小知识,这并不意味着Interface在定义超过1个需要这些方法的类时,您只会找到一个有益的东西吗?

更清楚的是,如果我有一个类做了一件事而没有其他类需要做那样的事情,那么Interface在那个类上使用它是没有意义的吗?

所以你不会Interface在每个课上使用一个对吗?

PS)如果你投票这个问题,exact duplicate那么你没有阅读问题,只有标题,因为我已经阅读了大部分类似的问题

php oop interface

10
推荐指数
1
解决办法
3926
查看次数

为什么我需要接口?

可能重复:
接口:为什么我似乎无法掌握它们?
我为什么要使用接口?

我认为这个问题重复了1000次,我很抱歉再次提问.我真的在寻找一个简单的简单答案,为什么我明确需要接口,或者如果你请解释一些我没有接口就无法实现的东西.

如果它是多重继承,那么我会请你给我一个简单的例子,通过它我可以理解为什么我需要接口.

- 提前.

注意:我在.NET(C#)语言的上下文中提出这个问题

编辑1:现在,每当我尝试学习界面时,我的思绪告诉我 - >"伙计你要用白纸勾勒出某人的身体"但是你还需要另一张白纸,你需要再次绘制轮廓,绘制所有身体部位填充颜​​色给他们以获得真实的图片".那么为什么我只是为了获得轮廓而浪费第一张白纸.

.net c# inheritance interface

6
推荐指数
2
解决办法
4104
查看次数