gpt4 book ai didi

c# - 公共(public)变量的传递地址

转载 作者:行者123 更新时间:2023-11-30 13:21:24 29 4
gpt4 key购买 nike

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

ML.Register("Radius", &lBeacons[i].Radius, 0.0f, 200.0f, 10.0f);

我收到这个错误:

error CS0212: You can only take the address of an unfixed expression inside of a fixed statement initializer

注册函数如下所示:

public unsafe void Register(string desc, float* val, float minimum, float maximum, float stepsize)

信标是一个列表。它拥有公共(public)半径的类(class)。

最佳答案

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

public void Register(string desc, ref float val, float minimum,
float maximum, float stepsize) {...}

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

ML.Register("Radius", ref lBeacons[i].Radius, 0.0f, 200.0f, 10.0f);

但如果您将 Radius 设为属性,它将不会工作 - 所以不要这样做。考虑传递信标(或类似)本身,或一些其他基于对象(或可能基于事件)的机制。


类似于:

ML.Register("Radius", lBeacons[i], 0.0f, 200.0f, 10.0f);

与:

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

这里我们有一个对 Beacon 对象的引用,它没有指针的不安全问题。如果您不想直接公开 Beacon,请考虑使用接口(interface)。

关于c# - 公共(public)变量的传递地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897962/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com