0

スコープ外で作成されたクラス内の変数を追跡したいと思います。C ++では、このようなポインタを渡すだけです。

class Camera
{
    Player* player;
    Position pos;

    void setFollow(Player* pl) { pl = player; }
    void update() { pos = pl->getPos(); }
}

int Main()
{
    Camera* camera = new Camera();

    Player* player = new Player();

    camera->setFollow(player);
}

C#では、参照渡しを試みましたが、機能しなかったようです。

public class Game1 : Microsoft.Xna.Framework.Game
{
    Camera cam = new Camera();
    Player player = new Player();

    cam.setFollow(ref player);  // <-- by reference
}

これは私の実際のコードの短縮版です。

助けてくれてありがとう。

編集:情報を提供してくれたすべての人に感謝します。

4

5 に答える 5

3

C#では、オブジェクト(クラス)変数は暗黙的にポインターです。したがって、クラスにタイプCameraのフィールドがある場合、コードで設定すると、両方の参照が同じインスタンスを指すようになります。参照によって値型( 、、、など)を渡さない限り、通常は使用する必要はありません。pPlayercam.p = playerrefintfloatstructs

于 2012-04-23T12:19:22.780 に答える
1

refオブジェクトは常にC#で参照によって渡されるため、ここでキーワードを使用する必要はありません。C#のキーワードは通常、C / C ++で使用されるrefポインターへのポインター( )のように使用されます。**

于 2012-04-23T12:18:17.367 に答える
0

プレーヤー自体は参照型であり、なぜrefを使用しているのですか。refの詳細については、 http://msdn.microsoft.com/en-us/library/14akc2c7.aspxを参照してください。

于 2012-04-23T12:17:49.663 に答える
0

クラスは常に参照によって渡されるため、実行しようとしているrefビットは必要ありません。

単に

cam.setFollow(player);
于 2012-04-23T12:18:07.000 に答える
0

refC#のキーワードは本当に悪い名前です。それはあなたが参照によって通過するという意味ではありません!aliasこれはのセマンティクスを説明する良い単語であるため、名前を付ける必要がありrefます。

// here I assign a reference(another bad name :) )
// you can also call it Garbage Collector Handler 
// of type Player with a new object
Player player = new Player(); 
// ref means that player is the same thing that parameter pl of setFollow
cam.setFollow(ref player); 

詳細

于 2012-04-23T12:27:05.450 に答える