C# 虚拟方法

C# virtual methods

在 C++ 中我能够做到这一点

class App
{
public:
    virtual void OnMouseMove(etc);
    void FunctionThatDoesStuff();
};

void App::FunctionThatDoesStuff()
{
    // Engine stuff here
    OnMouseMove(etc);
}

class ProjectName : public App
{
public:
    void OnMouseMove(etc);
};

void ProjectName::OnMouseMove(etc)
{
    // User stuff here
}

然后,当在 App 中从 FunctionThatDoesStuff 调用 OnMouseMove 时,它​​将被覆盖并改为调用 ProjectName.OnMouseMove。但在 C# 中我无法做到这一点。这是我的第一次尝试。

public class App
{
    protected void MouseMove()
    {
        // Engine code here
        OnMouseMove(etc);
    }

    protected virtual void OnMouseMove(etc)
    {
        // Do Nothing
    }
}

public class ProjectName : App
{
    protected override void OnMouseMove(etc)
    {
        // User code here
    }
}

我尝试使用委托,因为它们只是未实现的函数。但这没有用。我怎样才能在 C# 中实现等效?我想我可以解决它并使用事件。但是有没有更相似的方法来做到这一点。

如果我明白你在谈论抽象方法或 类:

public abstract class App
{
    protected void MouseMove()
    {
        // Engine code here
    }

    protected abstract void OnMouseMove(object etc);
}

public class ProjectName : App
{
    protected override void OnMouseMove(object etc)
    {
        // User code here
    }
}

假设您有以下默认实现:MouseMove,在 App Class.

public class App
{
    protected void MouseMove()
    {
        // Engine code here
    }

    protected virtual void OnMouseMove(object etc)
   {

   // Default implementation here
    Console.WriteLine('A');

   }
}

然后你有第二个 class ProjectName 和另一个实现

public class ProjectName : App
{
    protected override void OnMouseMove(etc)
    {
        // Overrride implementation

         Console.WriteLine('B')
    }
}

然后当你有类型的对象时:App 它将打印 A 当您拥有类型为 'ProjectName' 的对象时,它将打印 B

    var app = new App();

    var project = new ProjectName();

    app.OnMouseMove();
// Will Print A

    project.OnMouseMove();
// Will Print B