将成员变量设置为类外的对象

时间:2012-04-23 12:14:29

标签: c# variables reference parameters

我想跟踪我的类中在范围外创建的变量。在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
}

这只是我实际代码的缩短版本。

感谢您的帮助。

编辑:感谢所有人提供的信息。

5 个答案:

答案 0 :(得分:3)

在C#中,对象(类)变量是隐式指针。因此,如果您的班级Camera的字段p类型为Player,则在代码中设置cam.p = player会使两个引用都指向同一个实例。除非您通过引用传递值类型(refintfloat等),否则通常无需使用structs

答案 1 :(得分:1)

此处不应使用ref关键字,因为对象总是通过C#中的引用传递。 C#中的ref关键字通常更像是指向指针(**)将在C / C ++中使用

答案 2 :(得分:0)

播放器本身是一个引用类型,为什么你使用ref。 你可以在这里阅读更多关于ref的内容 http://msdn.microsoft.com/en-us/library/14akc2c7.aspx

答案 3 :(得分:0)

类总是通过引用传递,因此您不需要您尝试执行的ref位

简单地

cam.setFollow(player);

答案 4 :(得分:0)

C#中的

ref关键字名称非常糟糕。这并不意味着你通过参考传递!它应该被命名为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); 

More details

相关问题