A类 有方法 A1 \ A2 \ A3,实例化a,即:A a = new A();
B类 有方法 B1 \ B2, 实例化b,即:B b = new B();
我可不可以定义一个类, C类 有方法 A1 \ A2 \ A3 \ B1 \ B2
调用 a\b 的时候, C c = a; 用c.A1去代替a.A1 或者 C c = b, 用 c.B1 去代替b.B1好像继承可以做到,继承如果 A、B有相同的方法 X呢,是算哪一个类的为准呢?

解决方案 »

  1.   

    A类 有方法 A1 \ A2 \ A3,实例化a,即:A a = new A(); 
    B类 有方法 B1 \ B2, 实例化b,即:B b = new B(); 
    我可不可以定义一个类, C类 有方法 A1 \ A2 \ A3 \ B1 \ B2 
    调用 a\b 的时候, C c = a; 用c.A1去代替a.A1 或者 C c = b, 用 c.B1 去代替b.B1 首先,继承类 C 可以有上面这种写法吗?
      

  2.   

    首先,继承类 C 可以有上面这种写法吗?
    继承类C可以这么写,会隐藏基类的方法
    C c; c.A1,就是调用C类的A1
    若要调继承的A的A1 则转为A ((A)c).A1
    楼主直接去调试就会明白的
      

  3.   

        在C#中不支持多重继承,你要使C类中同时拥有A类和B类的方法,可以把A类和B类定义为接口,再让C类分别继承它们,从而达到多重继承的目的。     如果A,B中有相同的方法,可以用命名空间或者类加点加方法名进行区分。
      

  4.   

    C#不支持多重继承,要达到你的目的,使用聚合即可。
    即:在C类中生成一个A对象和一个B对象,将对相关的方法调用转发至相应对象。class C
    {
        private a;
        private b;
       public C()
           {
              a=new A();
              b=new B();
           }
       public void A1()
       {
         a.A1();
       }
    ...
    }
    其他类似。
      

  5.   

    楼上说的不对吧,应该把A和B都定义成接口,然后C类继承A和B接口。
    因为,C#不支持多重继承,C#可以支持继承多接口。
      

  6.   


    class C{
      A a;B b;//如果要用A,和B的方法那封装它们不就可以了?
    }
    //如果要继承的话那你可先写C
    public class C{
     public virtual void A1{}
     public virtual void A2{}
     public virtual void B1{}
    }
    //然后写A,和B为其子类
    public class A:C{}
    public class B:C{}
    //应用的时候就可以象你所说的那样调用了
    class App{
      static void Main(){
        C c1=new A();
        C c2=new B();
        c1.A1();c2.B1();
      }
    }
      

  7.   

    B继承A,C再继承B
    能达到楼主的目的
      

  8.   

    能写成 C c = a; 吗?
      

  9.   

    继承如果 A、B有相同的方法 X呢,是算哪一个类的为准呢?如果继承类有相同的被继承类方法,要用new隐藏
      

  10.   

    谢谢各位好友的回答,我想我要实现的功能应该是可以这样解决了:
    Abstract Class X { abstract fun1, abstract fun2, abstract property1, abstract property2}
    Class A : X { override fun1, override fun2, override property1, override property2}
    Class B : X { override fun1, override fun2, override property1, override property2}调用的时候:
    X x = new A(); { x.fun1();   void fun {…… = x.property1; ……}}
    X x = new B(); { x.fun1();   void fun {…… = x.property1; ……}}
    或者
    { void fun1 (X x){……}; 
    void fun2 {X a = new A(); fun1(a); ……}; 
    void fun3 {X b = new B(); fun1(b); ……}; 
    }这样的话,我把要调用A、B 的地方,都传一个 (X x) 参数进去,而不用传(A x)、(B x)这样可以把调用A、B两份代码合成调用(X x)一份代码,大家认为可以吗?
      

  11.   

    http://topic.csdn.net/u/20080319/08/5ca2b60f-c977-4e08-b94a-79c0fd006b37.html先把这个贴子结了,请大家去上面的贴子讨论,谢谢。