gpt4 book ai didi

C# 在不同程序集中定义重写方法

转载 作者:太空狗 更新时间:2023-10-30 00:50:18 24 4
gpt4 key购买 nike

我有一个我构建的类库,它包含许多从单个基类继承的类。

在基类上定义了一个名为 Process 的虚方法,它实质上会将类结构的内容处理到应用程序中。

应用程序的不同组件(服务器)之间有消息传递,它们传递和接收基类类型的消息,然后调用 Process()

我被卡住的地方是我需要能够覆盖应用程序其他部分中的 Process() 方法,即在不同的程序集中而不从中派生另一种类型。

根据我的阅读,这似乎是不可能的,所以看看使用接口(interface)是否可以解决问题?

编辑:

我在问题中没有提到的是,基类的每个派生类都需要有不同的 Process() 实现,具体取决于该类所需的功能。

例如:

class First : BaseClass
{
override void Process()
{
//do something
}
}

class Second : BaseClass
{
override void Process()
{
//do something else
}
}

覆盖过程方法中的代码需要在不同的程序集中,因为这段代码将根据它所属的类引用其他外部源,我不想在整个应用程序中传播。

澄清一下,我确实可以访问并且可以根据需要更改库类。

我一直在做一些进一步的阅读,使用委托(delegate)似乎可以解决这个问题..想法?

最佳答案

接口(interface),特别是策略模式可以解决您的问题。

public interface IProcessStrategy
{
void Process();
}

public class ProcessService
{
public void DoProcess( IProcessStrategy strategy )
{
...whatever
strategy.Process();
...whatever else
}
}

通过将处理分离到它自己的抽象中,您允许创建多个策略,并且从技术上讲,策略是在相同还是不同的程序集中定义并不重要。

更新:我想我终于知道你在做什么了,我的建议是有一个你可以注入(inject)但仍然有默认实现的接口(interface)。

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 可以在任何地方定义,包括不同的程序集,它只需要实现通用接口(interface)即可。

关于C# 在不同程序集中定义重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com