2013-08-01 79 views
1

我需要爲模擬C#類的多繼承的最佳方式提供建議,該類需要通過支持動態進行擴展。在擴展另一個類的類上實現DynamicObject功能

我有一個類MainClass不需要依賴於DLR - 它的所有屬性和方法都是靜態編譯的。它有大量的重載操作符。它是某種DSL。

ExtendedClass基本上是一個支持C#動態的MainClass,除了所有需要重載DynamicObject的TryGetMember/TryInvokeMember的MainClass功能外,客戶端還可以在運行時對擴展屬性進行評估。

這裏有一個DynamicObject是一個類的問題,而不是一個接口。所以ExtendedClass只能從DynamicObject派生,這意味着它應該基本上覆制所有的MainClass功能。我猜這種情況並不少見(兩個類似的類,一個必須從某個系統類派生,因此不可能通過繼承另一個系統來重用功能)。有沒有比直接的方法更聰明的方式來處理這種情況:將MainClass作爲成員字段添加到ExtendedClass,複製其所有方法/屬性並簡單地將其轉發給MainClass的包含實例?

回答

1

很難用這樣一個非常通用的描述來說。常見圖案我熟悉的是:

public class MainClass{ 
     foo bar(); 
     more stuff {get;set;} 
     .... 
} 

public class ExtendedClass:MainClass{ 
     protected class Helper:DynamicObject{ ...} 
     private Helper _helper; 
     public Extended(){ 
      _helper= new Helper(this); 
     } 

     public dynamic Extend { 
     get{ return _helper}; 
     } 
} 

這樣,如果你將需要調用Extend第一排序蹦牀的動態屬性或方法都有自己的命名空間。

+0

但我現在看着IDynamicMetaObjectProvider,它不會解決這個問題嗎?根據文檔,當我可以將動態添加到從另一個類繼承的類時,這是確切的情況。 –

+0

這是,但它是很多工作。如果你想走這條路,我會對結果非常感興趣。 – jbtule

+0

現在看看它。我的表情並不那麼複雜,希望它不會那麼難。但我認爲這需要時間。 –

相關問題