所以这是我的设置,评论显示了我想做的事情:
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。
答案 0 :(得分:3)
class Child
{
Parent parent=null;
public Child(Parent p)
{
parent=p;
}
void SomeMethod()
{
parent.MethodToCall();
}
}
答案 1 :(得分:2)
这应该是如何做到这一点的一个很好的例子
class Child : Parent
{
private void SomeMethod()
{
base.MethodToCall();
}
}
class Parent
{
Child c = new Child();
protected void MethodToCall()
{
c.MethodToCall();//not sure if you are wanting to call c.MethodToCall();
}
}
答案 2 :(得分:0)
你在做什么实际上是在滚动你自己的事件。在内部,事件处理程序只是附加到事件的委托,唯一的区别是只有事件的所有者才能提升它。
答案 3 :(得分:0)
好吧,在OOP术语中,正确答案如下:
class Child : Parent
{
void SomeMethod()
{
base.MethodToCall();
}
}
class Parent
{
protected void MethodToCall()
{
// protected methods are accesible from
// descendants and private from outside
}
}
但是你总是可以使用aggregation
来避免继承