C# 限制成员对多个特定类的访问
我的泵可以给气球充气。没问题!但是当我试着用我的泵来打开气球时,它真的不太管用。我可以继续使用我的泵,最终,它会弹出气球,但我的手臂真的很累,我现在想弹出它。所以,相反,我得到了我的尖头棒和弹出!当然,我的点棒对气球的充气效果甚至不如泵对气球的充气效果C# 限制成员对多个特定类的访问,c#,.net,oop,clr,C#,.net,Oop,Clr,我的泵可以给气球充气。没问题!但是当我试着用我的泵来打开气球时,它真的不太管用。我可以继续使用我的泵,最终,它会弹出气球,但我的手臂真的很累,我现在想弹出它。所以,相反,我得到了我的尖头棒和弹出!当然,我的点棒对气球的充气效果甚至不如泵对气球的充气效果 Class Balloon { Private int _volume = 0; Private bool _popped = false; Public Balloon() { } //Restrict ca
Class Balloon
{
Private int _volume = 0;
Private bool _popped = false;
Public Balloon() { }
//Restrict calling to only a PUMP object
Internal Inflate()
{
if (_popped) return;
_volume += 1;
if (volume > 10) this.Pop();
}
//Restrict calling to only a POINTY STICK object
Internal Pop()
{
if (!_popped) _popped = true;
}
Public string GirlHappiness
{ get
{
if (!_popped)
{
if (_volume < 3)
return "......";
if (_volume < 6)
return "Ooohhh";
else
return "Ahhhh! Yay!";
}
else
return "WaAaAaAaHhHhHh";
}
}
Public string BoyHappiness
{ get
{
if (!_popped)
{
if (_volume < 3)
return "zzzzzz";
if (_volume < 6)
return "zzzzzz";
else
return "zzzzzz";
}
else
return "Ahahaha YAY!";
}
}
}
那么,有没有办法做到这一点?我无法通过分离程序集来实现期望的结果,而我探索的另一种方法,使用反射和跟踪堆栈,在调试之外是不可靠的。怎么办 我想到两种方法:使用显式接口实现或事件 使用显式接口,可以为那些不威胁实例“原样”的人隐藏实现。例如:
interface IPumpable
{
void Pump();
}
interface IPoppable
{
void Pop();
}
class Balloon :IPumpable, IPoppable
{
private void IPumpable.Pump()
{
throw new NotImplementedException();
}
private void IPoppable.Pop()
{
throw new NotImplementedException();
}
}
public static void PopMethod(IPoppable poppable)
{
poppable.Pop();
}
public static void PumpMethod(IPumpable pumpable)
{
pumpable.Pump();
}
static void Main(string[] args)
{
Balloon balloon = new Balloon();
PumpMethod((IPumpable)balloon);
PopMethod((IPoppable)balloon);
}
请注意,泵和Pop实现可以标记为私有。它们仅在您分别威胁气球为IPumpable或IPoppable时可见