[英]C# Define override method in different assembly
我有一個我構建的類庫,它包含許多從單個基類繼承的類。
在基類上定義了一個名為Process的虛方法,它基本上將類結構的內容處理到應用程序中。
應用程序的不同組件(服務器)之間存在消息傳遞,它們傳遞和接收基類類型的消息,然后調用Process()
我遇到的問題是,我需要能夠覆蓋應用程序其他部分的Process()方法,即在不同的程序集中,而不從中導出另一種類型。
從我所看到的這似乎是不可能的,所以看看是否使用接口將解決問題?
編輯:
我在問題中沒有提到的是基類的每個派生類需要具有不同的Process()實現,具體取決於該類所需的功能。
例如:
class First : BaseClass
{
override void Process()
{
//do something
}
}
class Second : BaseClass
{
override void Process()
{
//do something else
}
}
覆蓋過程方法中的代碼需要位於不同的程序集中,因為此代碼將基於其所屬的類引用其他外部源,而不希望在整個應用程序中傳播。
只是為了澄清我有訪問權限,如果需要可以更改庫類。
我一直在做進一步的閱讀,看起來使用代表可以解決這個問題..想法?
接口,特別是策略模式將解決您的問題。
public interface IProcessStrategy
{
void Process();
}
public class ProcessService
{
public void DoProcess( IProcessStrategy strategy )
{
...whatever
strategy.Process();
...whatever else
}
}
通過將處理分離為自己的抽象,您可以創建多個策略,從技術上講,如果策略是在相同或不同的程序集中定義的,則無關緊要。
更新:我想我終於知道你在做什么,我的建議是有一個你可以注入的接口,但仍然有一個默認的實現。
public interface IProcessStrategy
{
void Process();
}
public class BaseClass
{
private IProcessStrategy _strategy;
public void Process()
{
// this is where the real "override" happens
if ( _strategy == null )
{
// default implementation
...
}
else
// overridden
_strategy.Process();
}
public void OverrideWith( IProcessStrategy strategy )
{
this._strategy = strategy;
}
你使用它的方式:
BaseClass f = new BaseClass();
f.Process(); // uses the default implementation
和其他地方
BaseClass f = new BaseClass();
IProcessStrategy p = new First();
// override
f.OverrideWith( p );
f.Process(); // overridden with a new implementation
注意那個被重寫的實現, First
可以在任何地方定義,包括不同的程序集,它只需要實現通用接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.