大家都说汽车是一个类,汽车继承交通工具这个父类,汽车有移动这个功能。
人是一个类,人也有移动这个功能,现在要实现移动这个功能,那么,这个移动的方法是不是要在两个类里实现,还是有什么办法只需在一个地方实现复用,还有的疑问是,如果人、汽车类、或交通工具类都继承了一个移动的接口,那又要在哪实现,
另一个问题:
在作数据传输的时候,会收到各种表示不同意思的数据包,所以我抽象分离出了一个父类:数据包类:F,然后定义了表示CA类数据包、CB类数据包都继承父类F.由于数据传输是用异步通信,所以要建立委托调用回调函数来接收返回的数据包,在不抽象分离出父类的时候,我是按以下的方式建立委托的:    public delegate void ResultEvalator(Result _r);但是现在既然把数据包都分离,而且客户端可以根据发送的数据包的格式来确认回收到的一定是CA或CB,那是不是要为各种不同的回发数据包建立不同委托,在发送数据包的时候进行引用不同的委托,还是我的构思有错,正确优雅的做法应该如何。说的通俗和不专业点,我想要的效果就是这个委托可以继承(但委托好像无法继承。)

解决方案 »

  1.   

    用接口,人和汽车都能移动,就可以抽象出一个IMove接口,里面定义一个Move方法,在人和汽车里面复写自己的Move方法就好啦
      

  2.   

    至于第二个人就不用了,直接在客户端进行判断是哪个类型的包就可以了,用Result _r is CA, Result _r is CB判断
      

  3.   

    在接口里定义一个IMove
    然后人类继承接口实现IMove
    然后车类继承接口实现IMove
      

  4.   

    sinoknight,在人和汽车里面复写自己的Move方法就好啦如果MOVE的内容几乎或完全一样,那这样就要在不同的类、汽车或交通工具和人每个里写一次,对吗?如果是这样,MOVE的方法的实现内容又完全一样,那如果后期想修改这个MOVE方法,是不是每个类里的每个MOVE都得改一次?
    纯头脑混乱中,请指教!
      

  5.   

    我还以为是CSDN的oo,此oo非彼oo。
      

  6.   

    第一个问题:
        继承的概念性问题。
        实例中可以这么来理解:类A(交通工具)中有一个函数Move(非private定义),B(汽车)继承A之后,B也拥有了Move函数。
        接口是对规范的定义,比如说I(移动)中定义了Move接口,那么所有继承I的类都必须遵循I的规范,也就是说都必须有Move这个接口的定义或实现。
    第二个问题:
        父类中定义一个virtual函数,在构造函数中把它丢给委托,子类重写这个函数
      

  7.   


    对于这个问题,要具体问题具体分析,
    如果有时间建议你看看head first design pattern ,会又有不少的收获的。
      

  8.   

    从新描述第二个问题:
     
    在异步数据通信,利用委托,会收到服务端返回的数据包(Result),    public delegate void ResultEvalator(Result _r);     Send sendObj = new Send("A命令", new ResultEvalator(ReResult));
        
        sendObj.发送();
      void ReResult(Result _t)
        {
             //判断数据格式 -t 调用不同的方法
         //或根据发送的A命令 调用不同的方法
         }客户端发送不同的指令A,B,服务端会根据A\B的不同,然后返回不同结果的Result,客户端,根据我们发的指令A、B调用相应的方法来处理不同的Result.
    =============================
    现在我想把不同的Result抽象出一个父类F,然后根据不同的返回结果创建不同的子类ResultCA,ResultCB   而最直接的更改就是我也要继续创建   public delegate void ResultCAEvalator(ResultCA _r); 
       public delegate void ResultCBEvalator(ResultCB _r); 这我感觉太不合理。。请问接下来我该怎么处理???????谢谢先!
      

  9.   

    lonehare
    第二个方法是否可以更详细点。
      

  10.   

    这里我不知道你需要调用的ResultCA _r和ResultCB _r的方法是否相同?是否是在父类里面有的方法?
    如果有的话,直接调用好了,会自动根据传进来的CA还是CB调用他们的方法的
      

  11.   

    还有这个,虽然说人和汽车都有Move方法,但是不能用一个基类,然后人和汽车都继承它的方法来实现,因为人和汽车是两个在现实世界中完全不同的类型,他们只是都具备Move的功能罢了,所以要用interface