【发布时间】:2013-03-21 16:17:22
【问题描述】:
这是我的设置,评论显示了我想要做什么:
class Process
{
void SomeMethod()
{
// Here I want to call Parent.MethodToCall()
}
}
class Controller
{
Process c = new Process();
void MethodToCall()
{
}
}
现在Controller.MethodToCall() 将在Process 类的整个生命周期中被多次调用。
这只是需要调用的父方法,所以我认为使用event 会有点浪费,因为我永远不会删除处理程序并且只会调用一次。
所以我目前用来解决这个问题的方法如下:
class Process
{
public Func<void> Method { get; set; }
void SomeMethod()
{
Method();
}
}
class Controller
{
Process c = new Process() { Method = MethodToCall }
void MethodToCall()
{
}
}
首先,语法可能不完美,我很快在记事本中敲了它。
我的问题:什么是实现我想要的最好的方法,因为我正在做的事情看起来很混乱?......或者我在设计方面完全错误地考虑了这个?
基本上我想要做的是在 Controller 类中调用一个方法而不将其公开,因为如果它是公开的,我可以简单地将 Controller 作为参数传递给 Process。
【问题讨论】:
-
继承怎么样?孩子:父母
-
父/子名称让我们考虑继承,但事实并非如此,否则您可以简单地使其受到保护(或者......它是?)。最好的解决方案(如果委托不是您想要的)可能涉及一个接口(这是您甚至可以拥有私有继承的唯一情况)但您应该描述 域...什么更好另一个案例可能不好(你不会得到关于如何调用方法的 1000 个答案......)
-
我同意..基于任一场景
Children可以拥有MultipleParents` 和Parents可以拥有MultipleChildren有关 OP 打算如何使用或正在使用的更多信息在提供最佳答案方面对我们其他人最有利 -
已编辑,抱歉,这不是继承问题。
-
只需为您的属性方法使用 System.Action。控制器可以将其设置为自己的方法或匿名委托(或任何您可能需要的)。有了更多信息,可能会有更好的解决方案,但这应该可行。