可一些身體解釋我的抽象和接口在asp.net,C#通過採取適當方面例子... pleasse 我不理解它長期抽象和接口的解釋
抽象和接口的解釋
回答
我經常發現下面的示例相當照明當涉及到解釋這個:
免責聲明:代碼示例直接寫入文本,並可能包含我監督的錯誤。請讓我知道,如果你發現這樣的錯誤。
假設你有一個客戶表的數據庫,並在你的代碼中有一個客戶類:
class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
爲了提供一種機制,從數據庫中獲取客戶數據,您需要寫一些這樣的課。這可以放置在稱爲存儲庫的東西中。現在,我們不希望我們的代碼太依賴於我們使用的確切數據庫。它可能是SQL服務器,它可能是一個文本文件。所以我們想要一個抽象層屏蔽這些知識的代碼。所有我們需要知道的是什麼這樣的庫看起來像是:
public interface ICustomerRepository
{
Customer GetCustomer(int id);
IEnumerable<Customer> FindCustomers(string beginningOfName);
}
我們現在可以實現此接口用於數據存儲,我們使用:
public class SqlServerCustomerRepository : ICustomerRepository
{
public Customer GetCustomer(int id)
{
using(SqlConnection connection = new SqlConnection(connectionString))
{
// code to fetch data and populate Customer objects go here
}
}
// implementations of other members of ICustomerRepository
// left out to keep code short. Just imagine they are here :)
}
最後,當我們要使用此代碼,我們可以有一個工廠創建的具體實施ICustomerRepository
使用:
public static class RepositoryFactory
{
public static ICustomerRepository CreateCustomerRepository()
{
return new SqlServerCustomerRepository();
}
}
...在我們的代碼,我們需要的數據:
ICustomerRepository repository = RepositoryFactory.CreateCustomerRepository();
IEnumerable<Customer> customers = repository.FindCustomers("A");
這種方式,有特定類型的使用存儲庫的消耗代碼之間沒有硬耦合,(除了在工廠方法,但這也正是這種知識存在獨一無二的地方) 。這使得替換具體的存儲庫實現變得很容易。這對於測試也很有用,您可以輕鬆創建一個模擬庫,返回給定輸入的硬編碼結果,以便您可以單元測試需要來自庫的數據的代碼。
先生什麼是IEnumerable在這裏,似乎很難理解我請詳細說明這個..我是新手 – NoviceToDotNet 2010-09-30 15:50:44
@NovicetoDotNet:'IEnumerable
那麼抽象類和接口不是嚴格的asp.net技術他們是面向對象的概念。
接口
接口類似於類,但所有的方法和屬性是抽象的。一個接口不能像抽象類那樣實例化。 Interface中定義的所有方法和屬性默認爲public和abstract。
接口通常指的是實體向外部提供自身的抽象。界面可以幫助分離外部和內部通信的方法,而不會影響外部實體與類型的交互方式。 例如: 如果您有interface IDoSomething { void Do(); }
實現此接口的類必須爲Do()方法提供一個主體,例如
class SomeClass : IDoSomething { public void Do() { //body of the method } }
這樣做的好處是當你做一些需要的東西時Do方法你通過接口而不是類。
public static void SomeMethod(IDoSomething obj) { obj.Do(); }
現在SomeMethod(IDoSomething obj)
將與實現
抽象類
一個抽象類是具有定義爲抽象的至少一個方法的類的任何類工作。這種類不能被實例化。抽象類可以具有一個或多個抽象方法和屬性,以及其他方法和屬性(如普通類)。
的想法是相同的,但在抽象類,你可以有實現的邏輯,字段等方法。
抽象
抽象是隱藏的對象是如何工作的,其只顯示對象的,我們可以把它理解方式的信息的過程。意味着它代表了顯示地面細節的基本細節。我們把所有變量和方法放在一個必需的類中。
如:員工和病人。
公司有興趣填補關於僱員的詳細信息,如姓名,地址,資質,出生日期,年齡,手機,商標,經驗等
醫院興趣,以填補有關,如姓名,出生日期,身高,體重病人的詳細信息,年齡,地址,手機,血型等
公司和醫院有興趣填寫一些常見的字段,如姓名,年齡,DOB,地址,手機等。所以我們可以創建一個類,抽象類。這個類不會完整,但可以由其他類繼承。
摘要V5接口 不能創建抽象類的對象,但可以使這種推導。 一個抽象類可以包含抽象方法或非抽象方法。抽象成員在抽象類中沒有任何實現,但是派生類中必須提供相同的實現。
一個抽象類可以具有抽象成員以及非抽象成員。但是在接口中,所有成員都是隱式抽象的,接口的所有成員都必須覆蓋其派生類。
定義與所有的抽象成員一個抽象類是類似於定義的接口。也就是說我們可以說一個接口是一個抽象類,包含所有抽象成員。 類只能從一個基類繼承,所以如果要使用抽象類爲一組類提供多態性,它們必須全部從該類繼承。 抽象類還可以提供已經實施的成員。因此,您可以使用抽象類確保一定數量的相同功能,但不能使用接口。
這裏有一些建議,幫助你決定是否要使用一個接口或抽象類,爲您的組件提供多態性。
1)。如果您期望創建組件的多個版本,請創建一個抽象類。抽象類爲您的組件版本提供了一種簡單而簡單的方法。通過更新基類,所有繼承類都會隨着更改而自動更新。另一方面,接口一旦創建就無法更改。如果需要新版本的界面,則必須創建一個全新的界面。 2)。如果您正在創建的功能在各種不同的對象中都有用,請使用界面。抽象類應主要用於密切相關的對象,而接口最適合爲無關類提供通用功能。 3)。如果您正在設計小而精簡的功能,請使用接口。如果您正在設計大型功能單元,請使用抽象類。 4)。如果您想在組件的所有實現中提供通用的實現功能,請使用抽象類。抽象類允許您部分實現您的類,而接口不包含任何成員的實現。
- 1. 任何人都可以廣泛解釋抽象類和接口?
- 2. 接口和抽象
- 3. Java抽象和接口
- 4. 使用抽象和接口
- 5. 純抽象類和接口
- 6. PHP抽象類和接口
- 7. 抽象類和接口
- 8. Java抽象和接口
- 9. Java接口和抽象類的問題
- 10. 流暢的接口和泄漏抽象
- 11. 接口和抽象方法的區別
- 12. 接口和抽象的公共職能
- 13. Java的抽象接口
- 14. 解釋Java接口?
- 15. 使用接口和抽象類
- 16. 抽象類和接口在Java中
- 17. 使用接口和抽象類
- 18. 正確使用接口和抽象類
- 19. 使用抽象類和接口
- 20. 抽象接口模式
- 21. 抽象類或SoftDelete接口
- 22. 抽象類MouseAdapter與接口
- 23. 抽象類V/s接口
- 24. 接口vs 100%抽象類
- 25. 太多抽象/接口
- 26. 100%抽象類與接口
- 27. 接口或抽象類
- 28. 抽象類實現接口
- 29. 抽象接口繼承
- 30. 接口與抽象類
這個問題太廣泛了,爲什麼這個問題特別與asp.net有關? – 2010-09-30 15:14:48
聽起來像你是OOP的新手。看看這裏:http://www.lostechies.com/blogs/chad_myers/archive/2008/03/07/pablo-s-topic-of-the-month-march-solid-principles.aspx – Charles 2010-09-30 15:34:51