我想了解這行代碼是怎麼回事。它看起來像這樣:理解程序中的接口實現?
var adapter = (IObjectContextAdapter) db
其中db
是實體框架內的數據庫上下文。
首先,爲什麼界面上的括號?如果我把它們關閉,我有一個編譯錯誤,所以這告訴我有一些類型的語義在玩,並且這些括號告訴計算機做某事。
我假設db正在實現接口,我是否正確?爲什麼他們編寫這樣的代碼如果是這樣的話?
我想了解這行代碼是怎麼回事。它看起來像這樣:理解程序中的接口實現?
var adapter = (IObjectContextAdapter) db
其中db
是實體框架內的數據庫上下文。
首先,爲什麼界面上的括號?如果我把它們關閉,我有一個編譯錯誤,所以這告訴我有一些類型的語義在玩,並且這些括號告訴計算機做某事。
我假設db正在實現接口,我是否正確?爲什麼他們編寫這樣的代碼如果是這樣的話?
圓括號是C#顯式轉換運算符,因此它們本身並沒有與接口特別相關。
爲什麼要在特定的接口上使用強制類型轉換的原因之一就像您在示例中那樣,當您不知道給定對象的類型時,但您確實知道它實現了給定接口。當你調用你沒有控制權的代碼時,會發生這種情況。
該接口充當您,用戶以及實現該對象類的人之間的「契約」。您可以保證對象將實現指定的接口,然後可以調用此對象上接口定義的方法和屬性。
希望這會有所幫助。
編輯:
另一個原因是他們將使用一個轉換是如果類/對象實現多個接口,並且他們希望確保該IObjectContextAdapter
方法將被調用。這被稱爲Explicit Interface Implementation
首先,爲什麼界面上的括號?
的db
是一個對象(從您發佈,我們也不能說什麼的db
類型)。使用括號將此對象轉換爲實現此接口的對象,IObjectContextAdapter
。
我假設db正在實現接口,我是否正確?
這是正確的。
https://msdn.microsoft.com/en-us/library/ms173105.aspx – Enigmativity