传递公共变量的地址

Jus*_*axi 3 c# pointers unsafe ref

当我尝试传递这样的公共变量的地址时:

ML.Register("Radius", &lBeacons[i].Radius, 0.0f, 200.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

error CS0212: You can only take the address of an unfixed expression inside of a fixed statement initializer
Run Code Online (Sandbox Code Playgroud)

Register函数如下所示:

public unsafe void Register(string desc, float* val, float minimum, float maximum, float stepsize)
Run Code Online (Sandbox Code Playgroud)

信标是一个列表.它拥有一个具有公共半径的类.

Mar*_*ell 8

仅通过引用传递值是否有意义?

public void Register(string desc, ref float val, float minimum,
         float maximum, float stepsize) {...}
Run Code Online (Sandbox Code Playgroud)

当然,使用公共变量(字段)也是一个坏主意......它会像这样工作:

ML.Register("Radius", ref lBeacons[i].Radius, 0.0f, 200.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

但如果你制作一个房产,它将无法运作Radius- 所以不要这样做.考虑传递信标(或类似)本身,或其他一些基于对象(或可能基于事件)的机制.


就像是:

ML.Register("Radius", lBeacons[i], 0.0f, 200.0f, 10.0f);
Run Code Online (Sandbox Code Playgroud)

有:

private Beacon beacon;
public void Register(string desc, Beacon beacon, float minimum,
         float maximum, float stepsize) {
    this.beacon = beacon;
}
void Foo() {
    beacon.Radius++; // etc
}
Run Code Online (Sandbox Code Playgroud)

这里我们引用了Beacon对象,它没有unsafe指针问题.如果您不想Beacon直接公开,请考虑使用接口.