gpt4 book ai didi

interface - 接口(interface)的值(value)是什么?

转载 作者:行者123 更新时间:2023-12-01 07:12:06 26 4
gpt4 key购买 nike

很抱歉问了一个一般性的问题,但我一直在研究这些,除了说头部编程传达什么成员必须在类里面,我只是看不到任何好处。

最佳答案

面向对象编程有两个(基本)部分给新手带来麻烦;第一个是inheritance第二个是composition .这些是最难“得到”的;一旦你理解了这些,其他一切就容易多了。

你指的是composition - 例如,类(class)做什么?如果你走继承路线,它派生自一个抽象类(比如 Dog IS A Animal )。如果您使用组合,那么您正在制定契约(Contract)(A Car HAS A Driver/Loan/Insurance)。任何实现您的接口(interface)的人都必须实现该接口(interface)的方法。

这允许松散耦合;并且不会将您束缚在不适合的继承模型中。

在适合继承的地方使用它;但如果两个类别之间的关系本质上是契约关系,或 HAS-AIS-A ,然后使用接口(interface)对该部分进行建模。

为什么要使用接口(interface)?

举一个实际的例子,让我们进入一个业务应用程序。如果您有存储库;您需要使存储库上方的层成为接口(interface)层。这样,如果您必须以存储库的工作方式更改任何内容,您将不会影响任何内容,因为它们都遵守相同的契约(Contract)。

这是我们的存储库:

public interface IUserRepository 
{
public void Save();
public void Delete(int id);
public bool Create(User user);
public User GetUserById(int id);
}

现在,我可以在一个类中实现该存储库:
public class UserRepository : IRepository
{
public void Save()
{
//Implement
}

public void Delete(int id)
{
//Implement
}

public bool Create(User user)
{
//Implement
}
public User GetUserById(int id)
{
//Implement
}

}

这将接口(interface)与调用它的对象分开。我可以将这个类从 Linq-To-SQL 更改为内联 SQL 或存储过程,只要我实现了 IUserRepository界面,没有人会更聪明;最重要的是,没有任何派生自我的类(class)的类(class)可能会对我的更改感到生气。

传承与作曲:挚友

继承和组合旨在解决不同的问题。在适合的地方使用每一个,并且有整个问题的子集都可以同时使用。

关于interface - 接口(interface)的值(value)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785862/

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