2009-02-04 47 views
10

大家好,方法返回一個接口

我想在這行代碼

IDataReader myReader = questDatabase.ExecuteReader(getQuest); 

我使用DAAB但我不知道如何和什麼的意思事實上,ExecuteReader(DbCommand)方法返回一個IDataReader接口。

任何人都可以解釋,請

+0

我學習界面和有完全相同的問題。 Pablito的回答正是我所尋找的,並確認我正在構建我的實施。多謝你們!! – 2009-09-16 20:09:05

回答

15

它可以讓你不需要知道你正在使用哪種類型的DataReader(即SqlDataReader, OleDbDataReader, EtcDataReader),所以如果有一天你想改變你正在使用的datareader它不會影響你的邏輯,換句話說它給你抽象。 例如:

您可以在使用

其供應商使用

IDbCommand command = GiveMeSomeCommand(); 
IDataReader r = command.ExecuteReader(); 

不知道可以這樣:

private static IDbCommand GiveMeSomeCommand() 
{ 
    return new OleDbCommand(); 
} 

,也可以是

private static IDbCommand GiveMeSomeCommand() 
{ 
    return new SqlCommand(); 
} 

或其他。

編輯:

您還可以使用DBFactories。

DbProviderFactory factory = GiveMeSomeFactory(); 
IDbCommand command = factory.CreateCommand(); 
IDataReader r = command.ExecuteReader(); 

//and create more objects 
IDataAdapter adapter = factory.CreateDataAdapter(); 
IDbConnection conn = factory.CreateConnection(); 

,然後在其它層創建提供商

private DbProviderFactory GiveMeSomeFactory() 
{ 
    if(something) 
     return SqlClientFactory.Instance; 
    else if(somethingElse) 
     return OracleFactory.Instance; 
    else if(notThisAndNotThat) 
     return MySqlFactory.Instance; 
    else 
     return WhateverFactory.Instance; 

} 
4

因爲接口的實現並不重要,只要該接口提供了API,它返回一個接口。

+0

我真的非常感謝你們,我對你的奉獻感到驚訝,在這樣的社區裏感到非常幸運。 謝謝所有 – netseng 2009-02-04 13:24:20

3

「返回的接口」的真正含義:「返回的一些類實現該接口的實例」

在這種情況下,它返回非常相似SqlDataReader對象一個對象,讓您可以執行類似的方法.Read()並實現IDisposable和IDataRecord接口。

+0

我真的非常感謝你所有,我對你的奉獻感到驚訝,在這樣的社交圈裏感到非常幸運。 感謝所有 – netseng 2009-02-04 13:23:40

+0

這是一個類似的概念多態(即一個對象指針可以指向任何從Object繼承的引用類型? – iliketocode 2015-07-05 20:06:32

2

它本身並不返回接口,而是支持該接口的對象。

+0

我真的很感謝你所有,我很驚訝你的奉獻精神,在一個共同體這樣的。 感謝所有 – netseng 2009-02-04 13:23:06

6

該方法將返回一個對象,它是一個類的實例,並且該類的類將支持IDataReader。

重點是,對象的類型並不重要,只是類實現接口的事實。

如果您駕駛的是汽車,您不需要知道它是福特還是豐田,就可以用同樣的方式駕駛汽車。

駕駛「界面」是一樣的,一旦汽車支持接口,你可以驅動它。

同上IDataReader,一旦返回的類支持接口,您可以使用它。

+0

感謝所有,這是偉大的,是在這樣 – netseng 2009-02-04 13:12:38

2

它返回一個實現這個特定接口的對象,這就是你真正關心的。對象「是」IDataReader,並且可以執行IDataReader所具有的所有方法。

+0

我真的很感謝大家,我對你們的奉獻精神令人吃驚的一個comunity,這是GRAT是在這樣的comunity。 感謝所有 – netseng 2009-02-04 13:22:22

相關問題