【发布时间】:2016-03-24 14:14:59
【问题描述】:
一点上下文
我有一个接受“处理程序”的类,如下所示:
interface IHandler
{
void DoSomething(MyType type, string s);
}
public class MyType
{
private IHandler handler;
public MyType(IHandler handler = null)
{
this.handler = handler;
}
public void DoSomething(string s)
{
handler?.DoSomething(this, s);
}
}
问题
我想确保IHandler中的所有方法都在MyType中实现,没有第一个参数MyType type,在处理程序调用中填写this。
我的问题
有没有一种模式允许这样的事情?我想从MyType中的IHandler继承,但这需要调用者在调用中指定类型,这违背了目的。我也可以确保它们都被手动调用,但是接口会变得非常大,并且可能有几个父接口。这是我最后的手段。如果需要,我不介意更改代码。
我的目标
我希望能够在MyType 类中添加行为,同时允许处理程序为空(不添加行为)。我选择了这种模式,但我只是在规划代码,所以改变任何能给我这组功能的东西都会很棒。
【问题讨论】:
-
如果您将其更改为
DoSomething(string s),那么当您在MyType中实现它时,您不需要传递MyType的实例,因为它是MyType? -
@juharr 因为
IHandler可能会处理多种类型的MyType,我需要知道它在IHandler方法中是哪一种! :) -
听起来你可能会更好地使用generics。我仍然不完全确定您要达到的目标。
标签: c# class interface behavior