我有一個數據提供程序項目來訪問數據庫。這是由各種類組成(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++/CLI接口類與接口結構
- 4. C#多級泛型接口
- 5. C#泛型類V5接口
- 6. C#類型擴展接口
- 7. C#接口返回類型
- 8. C#接口和基類
- 9. 在C#中使用多態的接口#
- 10. C++中接口的多重繼承
- 11. C#引用接口類中的組件
- 12. Instanciate接口到新的C類#
- 13. 來自接口的C#鑄造類型
- 14. 沒有靜態類型的C#接口
- 15. 帶接口的C#類型聯盟
- 16. 在接口/基類中的C#枚舉?
- 17. C++中重疊的類java接口
- 18. 使用接口和類的多態性
- 19. 一個類的多個接口
- 20. 與多種通用類型的接口?
- 21. 映射多接口繼承類NHibernate的
- 22. 聲明包含C++類型ivar的obj-c類接口
- 23. 通過通用接口包裝C#類以使用多態性
- 24. 兩個類似接口的接口
- 25. 如何將接口傳遞給接受C#中ITestCase類型接口的方法?
- 26. C#接口C++ DLL?
- 27. 問題在接口(多態性)C#
- 28. 多線程OpenCV CascadeClassifier C++接口
- 29. 鑄造通用接口和類在C#
- 30. C#類型推斷,泛型和接口
你能舉一個你的界面和類會是什麼樣子的例子嗎?目前我不知道你提出的解決方案是什麼,所以我忍不住批評它。謝謝 – 2010-02-25 16:54:39
它不一定是一個有合同的界面。你也可以使用抽象類。抽象類的優點是維護起來更容易。您可以添加到它而不更改繼承它的類。如果你添加了一些接口,那麼所有這些類都需要實現它。 既然你沒有代碼樣本很難分辨哪個更適合。 – nickytonline 2010-02-25 17:06:40