F# 如何在另一个类中使用在一个类中定义的重写方法?

F# 如何在另一个类中使用在一个类中定义的重写方法?,f#,functional-programming,graphical-programming,F#,Functional Programming,Graphical Programming,我在为图形界面课程做的练习中遇到了一些问题。我正在用F#编写一个程序,定义如下: 我有一个类a,在其中我重写了OnPaint方法 我还有另一个类B,在其中我重写了OnPaint方法、OnMouse[Down/Move/Up]方法等 我将使用A中重写的OnPaint方法替换B中定义的重写的OnPaint方法(显然,A中的OnPaint方法是在类A中定义的,这意味着我必须实例化类型A对象) 我的问题是:我该怎么做?我是否需要在中定义一个方法,在该方法中传递一个PaintEventArgs.Gra

我在为图形界面课程做的练习中遇到了一些问题。我正在用F#编写一个程序,定义如下:

  • 我有一个类a,在其中我重写了OnPaint方法
  • 我还有另一个类B,在其中我重写了OnPaint方法、OnMouse[Down/Move/Up]方法等
我将使用A中重写的OnPaint方法替换B中定义的重写的OnPaint方法(显然,A中的OnPaint方法是在类A中定义的,这意味着我必须实例化类型A对象)

我的问题是:我该怎么做?我是否需要在中定义一个方法,在该方法中传递一个PaintEventArgs.Graphics参数,该参数的任务与a的OnPaint方法相同,而不是重写a中的OnPaint方法

例如: 我必须这样做:

type Ellipse() =
   ...
   override this.OnPaint e =
       e.Graphics.DrawEllipse(10.f, 10.f, 30.f, 30.f)

type classThatUseEllipse() =
   let ell = new Ellipse()
   ...
   override this.OnPaint e =
      ell.OnPaint(e)
还是像这样的

type Ellipse() =
   ...
   let myOnPaint (e:PaintEventArgs) =
       e.Graphics.DrawEllipse(10.f, 10.f, 30.f, 30.f)

type classThatUseEllipse() =
   let ell = new Ellipse()
   ...
   override this.OnPaint e =
      ell.myOnPaint(e)
或者这两个版本是相同的


我问这个问题是因为第一个版本经常会出现问题。

你真的不应该直接调用onpaint。相反,只需使子对象无效(这甚至可能不是必需的)?类似于:ell.Invalidate()?这是否也适用于其他被重写的方法(即OnMouse[Down/Move/Up])?您能否具体说明问题?第一个版本给你带来了什么问题?实际上,这个错误出现在一个类似的例子中,在这个例子中,我做了前面描述的相同的事情,错误消息是:“无法从此代码位置访问方法‘OnPaint’。”听起来像是可访问性修饰符问题?OnPaint的可访问性是什么?