簡體   English   中英

從C#中的派生類對象創建新的基類對象

[英]Create new base class object from derived class object in C#

我有一個Derived類型的對象,但想要一個Base類型的對象。 通常,我可以簡單地將對象轉換為Base的引用。 但是,對於我的WCF服務,我真的只想公開Base類。

有沒有一種巧妙的方法可以將Base轉換為動態類型為BaseDerived對象(或從Derived對象創建新Base )?

例:

myWcfResult.PropertyOfTypeBase = objectOfTypeDerived; // do some magic in this line
Assert.Trace(myWcfResult.PropertyOfTypeBase.GetType() == typeof(Base)); // should hold afterwards
// or at least WCF should be able to serialize it correctly into an XML element of type Base

如果您要實現的是隱藏Derived類的額外屬性,則有兩個選擇

  1. 使用者可以讓您明確指定類型
  2. 或者您必須更改設計。

在第二種情況下,您應該考慮使用組合而不是繼承,例如

  • Base對象或Derived對象包裝到新的適配器類中,該類僅公開所需的屬性
  • 使基類保持原樣,但不要通過繼承來添加附加功能,而應使用組合:基類將包含另一個對象,該對象將定義行為的某些方面。

恐怕沒有具體的例子就很難為您提供幫助。

如果沒有其他問題,我將接受自己的解決方法:使用AutoMapper將Derived克隆到新的Base

Mapper.CreateMap<Base,Base>();
Mapper.Map<Base,Base>(objectOfTypeDerived);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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