我的PUMP可以(膨胀)我的BALLOON。没问题!但是当我尝试使用我的PUMP(弹出)BALLOON时,它确实不能很好地工作。我可以继续使用我的PUMP,最终它会(弹出)气球,但我的手臂真的很累,现在我想(弹出)它。所以,相反,我得到了我的POINTY STICK和(pop)!当然,我的POINT STICK在(膨胀)我的BALLOON方面效率甚至低于PUMP(弹出)它的效果。
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!";
}
}
}
那么,有没有办法实现这个目标?我无法通过分离程序集来实现所需的结果,而我使用反射和跟踪堆栈探索的另一种方法在调试之外是不可靠的。该怎么办?!
答案 0 :(得分:0)
我脑海中浮现出两种方式:使用显式接口实现或事件。
使用显式接口,您可以隐藏那些不按原样威胁实例的人的实现。例如:
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);
}
请注意,Pump和Pop实现可以标记为私有。它们仅在您将气球分别作为IPumpable或IPoppable威胁时才可见。