[英]Inheritence in C# and referencing a dll containing the base class
我有一個場景,編譯器抱怨我錯過了所需的參考。
我有3個組件:
A.DLL
B.DLL (參考文獻A.DLL )
C.DLL
var derived = new DerivedClass();
在C.DLL中,我只引用B.DLL(我只需要訪問DerivedClass)。
編譯器給出了一個錯誤,說我還需要引用A.DLL
這完全破壞了封裝,我不確定為什么需要這樣做(因為B.DLL引用了A.DLL)。
編輯:關於“打破封裝”的錯誤選擇。 我的意圖是這導致了對這個項目(C.DLL)的額外編譯時約束,因為我只是從B.DLL實例化類型,而不是從A.DLL實例化。
我希望刪除此編譯時要求,主要是因為B和C位於相同的解決方案中,但A不會。
這完全破壞了封裝,我不確定為什么需要這樣做(因為B.DLL引用了A.DLL)。
我不明白它是如何“徹底打破封裝”的。
為了執行成員解析,編譯器需要知道BaseClass
。 因此,要編譯C.dll,您需要引用A.dll和B.dll。 當有人編寫訪問DerivedClass
實例的DerivedClass
,他們需要知道BaseClass
支持什么,因為它可能是DerivedClass
本身覆蓋的超集。
即使你不喜歡它,這就是它的方式。 如果您不希望在編譯時需要A.dll,則可以使用組合而不是繼承 - 但是無論如何您仍然需要在執行時使用 A.dll。
Blockquote這完全打破了封裝,我不確定為什么需要這樣做(因為B.DLL引用了A.DLL)。
我看到你修改了這個詞的選擇,但我想我明白你的意思。 如果你想確保A只能通過 B使用C,你想引用B而不是A中的C.
我確實理解編譯器需要同時使用B和C,但是我不明白為什么它不能根據A到B的引用以及從B到C的引用進行解析。在我看來,如果我' ve告訴你“B取決於C”和“A取決於B”,你可以推斷出 A也取決於C.
如果構建可以通過遵循依賴關系圖來解析類型,那么在我看來,只要您想使用引用來強制執行特定的代碼分層,就不必訴諸接口。 我不知道怎么做,但接口只是你真正想要一個實現的負擔,所以我希望這種事情是可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.