gpt4 book ai didi

c# - 了解接口(interface)

转载 作者:可可西里 更新时间:2023-11-01 03:03:39 25 4
gpt4 key购买 nike

我仍然无法理解哪些接口(interface)适用。我读了一些教程,但除了“它们使您的类信守 promise ”和“它们有助于多重继承”之外,我仍然不知道它们的真正用途。

就是这样。我仍然不知道什么时候会在实际工作示例中使用接口(interface),甚至不知道什么时候使用它。

根据我对接口(interface)的有限了解,它们可以提供帮助,因为如果某个东西实现了它,那么您可以只传递接口(interface),允许像不同的类一样传递,而不必担心它不是正确的参数。

但我永远不知道这到底是什么意思,因为他们通常会在此时停止展示代码在通过接口(interface)后会做什么,如果他们这样做了,似乎他们没有做任何有用的事情我可以看看然后说“哇,他们会在现实世界的例子中提供帮助”。

所以我想我想说的是,我正在尝试找到一个真实世界的示例,在其中我可以看到正在运行的接口(interface)。

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

ICalculator myInterface = new JustSomeClass();

所以现在如果我转到 myInterface 点并且智能感知会拉起我只会看到接口(interface)方法而不是 JustSomeClass 中的其他方法。所以我还没有看到这一点。

我也开始做单元测试,他们似乎喜欢使用接口(interface),但我仍然不明白为什么。

比如这个例子:

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;
}

比如为什么要费心制作这个界面?为什么不直接使用其中的方法创建 FormsAuthenticationWrapper 并收工呢?为什么先做一个接口(interface),然后让 Wrapper 实现接口(interface),最后写方法?

然后我不明白声明的真正含义。

就像我现在知道声明是这样说的

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

如果 formsAuth 为空,则创建一个新的 FormsAuthenticationWrapper,然后将其分配给作为接口(interface)的属性。

我想这可以追溯到为什么要引用这个东西的全部原因。特别是在这种情况下,因为所有方法都完全相同。包装器没有接口(interface)没有的任何新方法,我不确定但是当你这样做时,方法被正确填充(即它们有一个主体)它们不会转换为 stub ,因为那看起来真的毫无意义对我来说(它会被转换回一个接口(interface))。

然后在测试文件中他们有:

var formsAuthenticationMock = new Mock<AuthenticationController.IFormsAuthentication>();

所以他们只是传入了 FormsAuthentication,我猜这就是所有伪造的 stub 。我猜包装类是在程序实际运行时使用的,因为它有真正的方法可以做一些事情(比如让一个人退出)。

但是看看 new Mock(from moq) 它接受一个类或一个接口(interface)。为什么不再次让包装类将这些方法放入,然后在新的 Mock 调用中呢?

那不只是为你制作 stub 吗?

最佳答案

好吧,一开始我也很难理解,所以别担心。

想想看,如果你有一个类,可以说是一个视频游戏角色。

public class Character
{
}

现在假设我想让角色拥有武器。我可以使用接口(interface)来确定武器所需的方法:

interface IWeapon
{
public Use();
}

所以让我们给角色一个武器:

public class Character
{
IWeapon weapon;

public void GiveWeapon(IWeapon weapon)
{
this.weapon = weapon;
}

public void UseWeapon()
{
weapon.Use();
}
}

现在我们可以创建使用 IWeapon 接口(interface)的武器,我们可以将它们提供给任何角色类,并且该类可以使用该元素。

public class Gun : IWeapon
{
public void Use()
{
Console.Writeline("Weapon Fired");
}
}

然后你可以把它粘在一起:

Character bob = new character();
Gun pistol = new Gun();
bob.GiveWeapon(pistol);
bob.UseWeapon();

现在这是一个通用示例,但它提供了很多功能。如果您查找策略模式,您可以阅读更多相关内容。

关于c# - 了解接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com