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
在 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