У меня есть переменная тома, которую я хочу защитить от изменения, если только человек не называет определенную функцию. Есть ли способ сделать это там, где его можно изменить только этой функцией, кроме создания частного класса внутри класса. Я полагаю, что создание частного класса - хорошая идея, но мне было бы интересно, если у кого-то другой подход. AudioPlayer никогда не должен позволять изменять громкость без вызова SetVolume. Это код, который у меня есть здесь, но я задавался вопросом, были ли люди по-другому.Есть ли способ защитить переменную класса от изменения вне функции
public class AudioPlayer
{
private class VolumeManager
{
private AudioPlayer mAudioPlayer;
public VolumeManager(AudioPlayer audioPlayer)
{
mAudioPlayer = audioPlayer;
}
private float volume;
public void SetVolume(float _volume)
{
volume = _volume;
//Do other necessary things that must happen when volume is changed
//This is the point of the question
mAudioPlayer.ModifyChannelVolume(Volume);
}
public float GetVolume()
{
return volume;
}
}
private VolumeManager mVolumeManager;
public AudioPlayer()
{
mVolumeManager = new VolumeManager(this);
}
public void ModifyVolume(float volume)
{
mVolumeManager.SetVolume(volume);
}
}
Почему бы просто не сделать объем частным поплавком? – heartyporridge
Я думаю, что частный класс - единственный способ сделать это. Но в этом конкретном случае, почему бы просто не поместить собственный код в сеттер вместо отдельного метода? – Cameron
@Cameron Мне не очень нравится идея setter делать другие вещи, но ваше предложение хорошее и может быть использовано другими. что касается комментария от аналитики, это все равно позволит программисту в моей команде, который не понимает настройки для изменения тома, не вызывая других крючков. – Gandalf458