Не имеет ли смысла просто передавать значение по ссылке?
public void Register(string desc, ref float val, float minimum,
float maximum, float stepsize) {...}
Конечно, использование открытых переменных (полей) тоже плохая идея ... это будет работать так:
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, у которого нет unsafe
проблем с указателями. Если вы не хотите выставлять Beacon
напрямую, рассмотрите возможность использования интерфейса.