2009-06-11 7 views
0

私はVS 2010でF#を使用しています。クラスのメンバーに値を割り当てる方法を理解できません。F#クラスメンバーに値を代入する方法

type SampleGame = 
    class 
    inherit Game 
    override Game.Initialize() = 
     spriteBatch <- new SpriteBatch(this.GraphicsDevice) 
     base.Initialize() 
    val mutable spriteBatch : SpriteBatch 
    end 

私はこれが正しいと思っていましたが、「spriteBatch」を見つけることはできません。これはオブジェクトのメンバーを作る正しい方法ですか、それとも良い方法ですか?

答えて

3

あなたはクラスのクラス定義(上記のコードでは最初の「SampleGame」の後に括弧)の一環として、あなたは、少なくとも1つのコンストラクタを定義

type SampleGame() =  
    inherit Game()  
    let mutable spriteBatch : SpriteBatch = null 
    override this.Initialize() =   
     spriteBatch <- new SpriteBatch(this.GraphicsDevice)   
     base.Initialize()  

を定義するために、この構文を好む、とすべきです次に、インスタンス変数を初期化/定義し、そのコンストラクタのコードを実行するために 'let'と 'do'を使い、最後にメソッド/プロパティ/オーバーライド/ etcを定義します。 (型名の後ろにコンストラクタがありませんが、インスタンス変数には 'val'を使用する構文とは対照的に)

+0

私はこれを試しました。暗黙の構築シーケンスが使用されていない限り、" let 'と' do 'バインディングはクラス定義では許可されません。私が "継承ゲーム"の部分に括弧をつけようとすると、 "この '継承'コンストラクションコールは暗黙的な構築シーケンスの一部ではありません。 – RCIX

+0

SampleGameの後の空白の括弧の最初のセットを見逃したように聞こえます(コンストラクタを定義するこれらの括弧は、暗黙の構築シーケンスを開始するものです)。 – Brian

+0

Yupそれはそれでした。ありがとう! – RCIX

0

変数を使用する前に宣言する必要があると思います。

type SampleGame = 
    class 
    inherit Game 

    val mutable spriteBatch : SpriteBatch 

    override Game.Initialize() = 
     spriteBatch <- new SpriteBatch(this.GraphicsDevice) 
     base.Initialize() 
    end 
+0

hmm ...あなたが正しいかもしれません。私はどこでも変数を宣言できるようにC#で甘やかされていると思います! – RCIX

+0

ちょうどそれを試して、didntヘルプ。特定のエラーは "値またはコンストラクタ" spriteBatch "が定義されていません – RCIX