我想跟踪我的类中在范围外创建的变量。在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
}
这只是我实际代码的缩短版本。
感谢您的帮助。
编辑:感谢所有人提供的信息。
答案 0 :(得分:3)
在C#中,对象(类)变量是隐式指针。因此,如果您的班级Camera
的字段p
类型为Player
,则在代码中设置cam.p = player
会使两个引用都指向同一个实例。除非您通过引用传递值类型(ref
,int
,float
等),否则通常无需使用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)
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);