0
我想動態覆蓋虛擬基類功能,並在應用程序中使用此重寫方法。如果我寫一個基本的示例類:c#加載即時生成的部分類彙編
partial Class myBase
{
public myBase() {}
public virtual void DoStuff()
{
throw new Exception("this function is not overriden");
}
}
partial Class myDeriv : myBase
{
public myDeriv() {}
}
現在我想在運行中覆蓋myDeriv.DoStuff。 所以我創建一個字符串代碼塊,並使用
CSharpCodeProvider.CompileAssemblyFromSource
方法編譯。在將此dll寫入磁盤後,我嘗試使用它加載它
Assembly.LoadFrom("onTheFly.dll");
但是,應用程序無法找到此重寫的函數。如果您還有其他更好的解決方案,我也向他們開放..我只需要在飛行中覆蓋功能..
謝謝大家!
我們需要一些更多的信息:在哪些程序集是這些類,我們需要看到代碼覆蓋這些類的代碼 – hcb
不太確定您是否可以隨時覆蓋虛擬功能。但也許你可以使用「新」關鍵字來「覆蓋」你的非虛函數? – Tigran
@hcb我寫了包含基類和派生類的程序集(我修正了這些類的部分示例代碼)。我想創建動態組合或創建,編譯新的重寫方法並附加到此派生類。 – MCA