我目前正在编写一个小的 C# 库来简化实现小的物理模拟/实验。
主要组件是一个 SimulationForm
,它在内部运行一个定时器循环并向用户隐藏样板代码。实验本身将通过三种方法定义:
Init()
(初始化一切)Render(Graphics g)
(渲染当前模拟状态)Move(double dt)
(dt
秒的移动实验)
我只是想知道让用户实现这些功能的更好选择是什么:
1) 被继承形式覆盖的虚方法
protected virtual void Init() {}
...
或
2)事件
public event EventHandler<MoveSimulationEventArgs> Move = ...
...
编辑:请注意,方法无论如何都不应该抽象。事实上,还有更多,但没有需要实现。将它们省略通常很方便,因为许多模拟不需要它们。
这是一个“范式”很酷的一点是你可以这样写
partial class frmMyExperiment : SimulationForm {
}
并且您完全能够与设计器以及所有继承的控件和设置/属性进行交互。我不想因为采用完全不同的方法而失去此功能。
最佳答案
在这种情况下我更喜欢使用虚拟方法。
另外,如果这些方法是必需的才能发挥作用,您可以将您的类设为abstract class。 .这在可用性方面是最好的,因为它会导致编译器强制使用。如果用户在未实现这些方法的情况下尝试使用您的类/表单,编译器会报错。
事件在这里有点不合适,因为这真的不是你想要的不仅仅是一个实现(事件允许多个订阅者),而且从概念上讲,它更像是一个对象的功能,而不是一个对象引起的通知。
关于c# - C# 中的虚拟方法或事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917433/