我在课堂上创建了一个成员函数。之后我想创建一个设置为该成员函数结果的成员值。
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
未定义的错误。
有人可以告诉我发生了什么事吗?
答案 0 :(得分:3)
因为drawFilledPlanet
是一个成员函数,所以它需要一个要调用它的类实例。如果您从其他成员函数调用它,您将使用该成员的定义来命名当前实例:
member this.f() = this.drawFilledPlanet ...
但是,在您的情况下,由于您正在定义member val
,因此您没有机会。在这种情况下,您可以将当前实例命名为类声明的最顶层:
type MyType() as this =
...
member val theSun = this.drawFilledPlanet ...
我想指出的一点是,这个定义可能没有你期望的效果。如果以这种方式定义theSun
,drawFilledPlanet
方法只会在类初始化时执行一次,而不是每次都访问theSun
。你有意吗?如果不是,那么您需要更改定义。如果是,那么为什么你需要这个定义呢?