我有一个数据提供程序项目来访问数据库。这是由各种类组成(PersonDataProvider,JobDataProvider ...) 我想创建一个接口。 我是否需要为每个班级创建一个界面? 我很想创建一个接口,而不是继承所有的类。这涉及到使所有的项目类都是部分的,并改变类的名称.......但我认为不是最好的解决方案。 有什么建议吗?C#多类的接口
C#多类的接口
回答
你不会继承你实现它的接口。没有必要为了添加接口而不需要创建类。
一个接口是一个契约,该类订阅说它将遵守接口中描述的方法,并将适当地实现它们。对于你的场景,你需要创建一个接口并在你的类中实现它,然后你可以将各种访问器类的实例作为接口的实例。
例如:
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();
}
希望能为您解决这个问题。
使用接口取决于您想要如何排列类。接口允许某种即插即用的行为。所以,如果你需要一个单独的界面,这意味着你将在所有实现该界面的类中有一组接口。在这种情况下,您的类PersonDataProvider,JobDataProvider等将具有相同的一组方法。如果你觉得,他们需要不同,仍然可以通过一个单一的供应商的门面,你可以考虑使用门面模式。
外观将为单个提供者提供接口,提供者类将实现它们。
我认为你正在接近这个错误。
当你创建一个接口时,你正在为这些类创建一个合约。把它想象成“我的班级将作为 IMyInterface”。
如果您的所有类都有一个常见的使用场景,那么可以使用单个通用接口(IDataProvider
,给定类名称..?)。
我的每个班级负责从数据库中检索某种“类型”的数据。例如PersonDataProvider将检索JobDataProvider作业详细信息等人的详细信息。 你是什么意思的常见使用情况? 所有用于检索应用程序的数据...是这种常见的情况? – GigaPr 2010-02-25 16:59:29
您可以使用IDataProvider
首先,我假设在所有xDataProvider
类中都有标准方法调用。例如,而不是SelectPerson
方法,您在PersonDataProvider
类上有Select
方法。如果不是的话,你需要做一些工作才能做出有效的练习。
在Visual Studio中,有一个抽取接口重构选项。在xDataProvider类中右键单击并选择重构 - 抽取接口。现在命名它(例如IDataProvider),并在界面中选择你想要的方法/属性,点击确定,完成这个类。
然后,只需在其他xDataProvider类中实现此IDataProvider接口。假设您已经在所有DataProvider类中实现了类似的方法,则不必再编写任何代码(超出: IDataProvider
)。
我看到你的观点,但如果让我们考虑以下情形 类1 公众人物获取(INT ID){} Class2中 公开招聘获取(INT ID,日期为准) CLASS3 公共地址获取(INT ID,srting邮编) 所有类implementin IDataProvider将必须实现不需要 难道不是它的方法呢? – GigaPr 2010-02-25 18:47:51
我会说你会在'IDataProvider'接口中有一个标准的'Get(int id)'方法。 – 2010-02-25 18:59:24
- 1. C# - 接口类
- 2. C++中多个接口到一个类
- 3. C#中的接口类
- 4. C++/CLI接口类与接口结构
- 5. C#多面板接口
- 6. C#多级泛型接口
- 7. C#类型扩展接口
- 8. C#泛型类V5接口
- 9. C#类接口设计
- 10. C#接口和抽象类
- 11. C#接口返回类型
- 12. C#接口和基类
- 13. C++连接接口到基类
- 14. Objective-C类实现C++接口
- 15. 具有多个定义的接口C#
- 16. 在C#中使用多态的接口#
- 17. C#中的接口vs多继承
- 18. C++中接口的多重继承
- 19. 用于C#asp.net的cfquery类型接口
- 20. 没有静态类型的C#接口
- 21. C++中重叠的类java接口
- 22. 来自接口的C#铸造类型
- 23. 在接口/基类中的C#枚举?
- 24. Instanciate接口到新的C类#
- 25. 带接口的C#类型联盟
- 26. C#接口中的方法,抽象类
- 27. C#引用接口类中的组件
- 28. 作为数据类型的C#接口
- 29. 使用接口和类的多态性
- 30. 与多种通用类型的接口?
你能举一个你的界面和类会是什么样子的例子吗?目前我不知道你提出的解决方案是什么,所以我忍不住批评它。谢谢 – 2010-02-25 16:54:39
它不一定是一个有合同的界面。你也可以使用抽象类。抽象类的优点是维护起来更容易。您可以添加到它而不更改继承它的类。如果你添加了一些接口,那么所有这些类都需要实现它。 既然你没有代码样本很难分辨哪个更适合。 – nickytonline 2010-02-25 17:06:40