【发布时间】:2015-05-07 06:50:37
【问题描述】:
我有一个音量变量,我希望保护它不被修改,除非该人调用某个函数。除了在类中创建私有类之外,有没有办法使它只能由该函数修改。我想创建一个私人课程是个好主意,但如果其他人有不同的方法,我会很感兴趣。绝不应允许 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);
}
}
【问题讨论】:
-
为什么不把 Volume 设为私有浮动?
-
我认为私人课程是这样做的唯一方法。但是在这种特殊情况下,为什么不把自定义代码放在 setter 中而不是单独的方法中呢?
-
也许我遗漏了一些东西:“私有嵌套类”如何更改“私有设置器”访问权限?如果它是带有“私有设置器”的“公共非嵌套类”,它仍然无法访问。在属性的“集合”上使用私有修饰符已经实现了既定目标..
-
@Gandalf458 它必须使用 SetVolume,因为 setter 已经是私有的 .. 外部类型不是blessed-to-private-access。
-
@user2864740 我认为 OP 想知道是否有比将音量字段隐藏在私有嵌套类中更好的方法,即使当前方法已经确保音量只能通过 @ 设置
mVolumeManager上的987654322@方法