繁体   English   中英

多个类的C#接口

[英]C# Interface for multiple classes

我有一个数据提供程序项目来访问数据库。 这是由各种类(PersonDataProvider,JobDataProvider ...)组成我想创建一个接口。 我是否必须为每个类创建一个接口? 我很想创建一个接口而不是继承所有类。 这涉及使所有项目类部分并更改类名.......但我认为这不是最好的解决方案。 有什么建议吗?

您没有继承实现它的接口。 没有必要让一个类部分为它添加接口。

接口是类订阅的合同,表示它将遵循接口中描述的方法并将适当地实现它们。 对于您的场景,您将创建单个接口并在类中实现它,然后您可以将各种访问器类的实例作为接口的实例传递。

例如:

public interface IDataProvider
{
    void LoadData();
}

然后,数据提供者将如下所示:

public class MyDataProvder1 : IDataProvider
{
    // Some methods

    // Must implement LoadData
    public void LoadData()
    {
        // Do something
    }
}

public class MyDataProvder2 : IDataProvider
{
    // Some methods

    // Must implement LoadData
    public void LoadData()
    {
        // Do something
    }
}

然后,您可以将对象作为IDataProvider传递,如下所示:

IDataProvider DataProviderA = new MyDataProvider1();
IDataProvider DataProviderB = new MyDataProvider2();

// Call function that expects an IDataProvider

DoSomething(DataProviderA);
DoSomething(DataProviderB);

...

public void DoSomething(IDataProvider DataProvider)
{
    DataProvider.LoadData();
}

希望能为你清除它。

我认为你正在接近这个错误。

当你创建一个界面时,你正在为这些类签订合同。 可以把它想象成“我的班级将充当 IMyInterface”。

如果所有类都有一个共同的使用场景,那么单个通用接口可能是合适的( IDataProvider ,给定类名......?)。

使用界面取决于您希望如何安排类。 接口允许某种即插即用的行为。 因此,如果您需要单个接口,这意味着您将在实现该接口的所有类中拥有一组接口。 在这种情况下,您的类PersonDataProvider,JobDataProvider等将具有相同的方法集。 如果您觉得,它们需要与众不同,并且仍然可以通过单一的提供者外观提供,您可以考虑使用外观模式。

Facade将为各个提供者提供接口,提供者类将实现它们。

首先,我假设所有xDataProvider类都有标准的方法调用。 例如,您在PersonDataProvider类上使用Select方法而不是SelectPerson方法。 如果没有,您需要做一些工作才能使其成为有效的练习。

在Visual Studio中,有一个Extract Interface重构选项。 右键单击xDataProvider类,然后选择Refactor - Extract Interface 现在命名它(例如IDataProvider)并在界面中选择所需的方法/属性,单击OK,然后单击此类完成。

然后在其他xDataProvider类中实现此IDataProvider接口。 假设您已经在所有DataProvider类中实现了类似的方法,则不必再编写任何代码(超出: IDataProvider )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM