调用父类中的方法

本文关键字:方法 父类 调用 | 更新日期: 2023-09-27 18:05:22

这是我的设置,注释显示了我想要做的:

class Process
{
    void SomeMethod()
    {
        // Here I want to call Parent.MethodToCall()
    }
}
class Controller
{
    Process c = new Process();
    void MethodToCall()
    {
    }
}

Process类的整个生命周期中,Controller.MethodToCall()将被多次调用。

这只是需要调用的父方法,所以我相信使用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。

调用父类中的方法

class Child
{
    Parent parent=null;
    public Child(Parent p)
    {
      parent=p;
    }
    void SomeMethod()
    {           
        parent.MethodToCall();
    }
}

这应该是如何做到这一点的一个很好的例子

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();
    }
}

在面向对象方面,正确的答案是:

class Child : Parent
{
    void SomeMethod()
    {
        base.MethodToCall();
    }
}
class Parent
{
    protected void MethodToCall()
    {
       // protected methods are accesible from
       // descendants and private from outside
    }
}

但是你总是可以避免继承,使用聚合

您所做的实际上是滚动您自己的事件。在内部,事件处理程序只是附加到事件的委托,唯一的区别是只有事件的所有者可以引发它。