1

我的泵可以(充气)我的气球。没问题!但是当我尝试使用我的 PUMP 来(弹出)气球时,它真的不能很好地工作。我可以继续使用我的 PUMP,最终它会(弹出)气球,但我的手臂真的很累,我现在想(弹出)它。所以,相反,我得到了我的 POINTY STICK 和(流行音乐)!当然,我的 POINT STICK 在(充气)我的气球时甚至不如 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!";
        }
    }
}

那么,有没有办法实现这一目标?我无法通过分离程序集来获得所需的结果,而我探索的另一种方法,使用反射和跟踪堆栈,在调试之外是不可靠的。该怎么办?!

4

1 回答 1

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 时,它​​们才可见。

于 2012-06-20T03:07:42.443 回答