2

我在一个类中创建了一个成员函数。之后我想创建一个设置为此成员函数结果的成员值。

type MyType() = 
  member this.drawFilledPlanet(xCoord:int, yCoord:int, pWidth:int, pHeight:int, color) =
    let brush = new System.Drawing.SolidBrush(color)
    this.window.Paint.Add(fun e -> 
      e.Graphics.FillEllipse(brush, xCoord, yCoord, pWidth, pHeight))

  member val theSun = drawFilledPlanet(350,350,100,100, this.yellow)

我收到drawFilledPlanet未定义的错误。

有人可以告诉我发生了什么吗?

4

1 回答 1

3

因为drawFilledPlanet它是一个成员函数,所以它需要一个类实例来调用它。如果您从另一个成员函数调用它,您将使用该成员的定义来命名当前实例:

member this.f() = this.drawFilledPlanet ...

但是,在您的情况下,由于您正在定义 a member val,因此您没有这个机会。在这种情况下,您可以在类声明的最顶部命名当前实例:

type MyType() as this =
    ...
    member val theSun = this.drawFilledPlanet ... 

我想指出的一件事是,这个定义可能没有你所期望的效果。如果theSun以这种方式定义,该drawFilledPlanet方法只会在类初始化时执行一次,而不是每次都theSun被访问。你是故意的吗?如果不是,那么您需要更改定义。如果是,那你为什么需要这个定义呢?

于 2017-01-17T12:51:12.157 回答