簡體   English   中英

C#中的繼承和引用包含基類的DLL

[英]Inheritence in C# and referencing a dll containing the base class

我有一個場景,編譯器抱怨我錯過了所需的參考。

我有3個組件:

  • A.DLL

    • 公共類BaseClass
  • B.DLL (參考文獻A.DLL

    • 公共類DerivedClass:BaseClass
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM