2015-07-18 32 views
-1

我想了解這行代碼是怎麼回事。它看起來像這樣:理解程序中的接口實現?

var adapter = (IObjectContextAdapter) db 

其中db是實體框架內的數據庫上下文。

首先,爲什麼界面上的括號?如果我把它們關閉,我有一個編譯錯誤,所以這告訴我有一些類型的語義在玩,並且這些括號告訴計算機做某事。

我假設db正在實現接口,我是否正確?爲什麼他們編寫這樣的代碼如果是這樣的話?

+0

https://msdn.microsoft.com/en-us/library/ms173105.aspx – Enigmativity

回答

1

圓括號是C#顯式轉換運算符,因此它們本身並沒有與接口特別相關。

爲什麼要在特定的接口上使用強制類型轉換的原因之一就像您在示例中那樣,當您不知道給定對象的類型時,但您確實知道它實現了給定接口。當你調用你沒有控制權的代碼時,會發生這種情況。

該接口充當您,用戶以及實現該對象類的人之間的「契約」。您可以保證對象將實現指定的接口,然後可以調用此對象上接口定義的方法和屬性。

希望這會有所幫助。

編輯:

另一個原因是他們將使用一個轉換是如果類/對象實現多個接口,並且他們希望確保該IObjectContextAdapter方法將被調用。這被稱爲Explicit Interface Implementation

2

首先,爲什麼界面上的括號?

db是一個對象(從您發佈,我們也不能說什麼的db類型)。使用括號將此對象轉換爲實現此接口的對象,IObjectContextAdapter

我假設db正在實現接口,我是否正確?

這是正確的。

+0

但我不明白,爲什麼我們會這樣鍵入?如果這個變量db已經實現了這個接口,爲什麼我們這樣做? – Aldmeri

+0

您能告訴我們在哪裏使用名爲'adapter'的變量嗎? – Christos

+0

@Amemeri如果變量'db'已經實現'IObjectContextAdapter',那麼你並不需要施放它。也許編程人員希望'adapter'成爲'IObjectContextAdapter'類型的一個特別引用,並且不知道它們可以將'var'更改爲'IObjectContextAdapter',並且分配可以工作。或者他們可能沒有足夠的咖啡。我不知道。 –