2017-01-17 8 views
2

私はクラス内でメンバー関数を作成しました。その後、このメンバ関数の結果に設定されたメンバ値を作成したいと思います。F#メンバー関数に基づいてメンバー値を作成

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

'drawFilledPlanet'の前に' this.'がありません。 –

+0

それはそれではありません – Nulle

+0

はい、それは..... –

答えて

3

drawFilledPlanetはメンバ関数なので、呼び出すクラスインスタンスが必要です。あなたがmember valを定義していることから、あなたがいることはありません、しかし、あなたの場合は

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

:あなたは、他のメンバ関数からそれを呼び出している場合は、現在のインスタンスに名前を付けるために、そのメンバーの定義を使用します機会。このような状況では、クラス宣言の最上部に現在のインスタンスに名前を付けることができます。私が指摘したいと思います

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

ことの一つは、この定義は、あなたが期待する効果を持っていないかもしれないということです。この方法でtheSunを定義した場合、は、クラスの初期化時に1回だけ実行され、theSunにアクセスされるたびに実行されることはありません。あなたはそれを意図しましたか?いいえの場合は、定義を変更する必要があります。はいの場合、なぜこの定義が必要なのですか?

関連する問題