有A,B,C三个类的实例变量a,b,c现在有一段代码code(),那么如何让多个类实例变量共用一段执行代码?注:code()方法的声明可以变.现在我想到的是方法重载,只是方法内代码都是一样的.public void code(A theA)  //调用: code(a)
public void code(B theB)  //调用: code(b)
public void code(C theC)  //调用: code(C)所以存在代码冗余的问题,不是最好.还有没有更好一些的方法?

解决方案 »

  1.   

    用Delegate 把方法变为一个对象
    传入去A,B,C中
      

  2.   

    让A、B、C 继承一个基类,在基类中实现方法,子类A、B、C直接调用就行。
      

  3.   

    在.net 2.0,应用范型方法吧。
      

  4.   

    三个类:
    class A
    {
    }
    class B
    {
    }
    class C
    {
    }一个范型类
    class Class1<T>
    {
    public static void Funny(T t)
    {
    Console.WriteLine(typeof(T).ToString());
    }

    }主程序
    public class MyClass
    {

    public static void Main()
    {
    A a = new A();
    B b = new B();
    C c = new C();
    Class1<A>.Funny(a);
    Class1<B>.Funny(b);
    Class1<C>.Funny(c);
    }
    }范型还没正式用过,书本上看到的。我觉得这里应用范型应该比较合适。
      

  5.   

    基类:
    class BaseCls
    {
       public void code()
       {
       }
    }
    三个类:
    class A:BaseCls
    {
    }
    class B:BaseCls
    {
    }
    class C:BaseCls
    {
    }
      

  6.   

    代码code()里要用到A,B,C三个类吗?
    如果用不到,就直接把代码code()写在一个公共函数类(如:CommonFunc)里~随用随调
    如果都用到的话,可以 qpl007(蓝色闪电)
      
       让A、B、C 继承一个基类,在基类中实现方法,子类A、B、C直接调用就行。
      
     
      

  7.   

    问题的关键是:code()方法里将引用A,B,C类型实列中的其中一个,而预先是不知道的,
    也就无法声明引用类型了.打个不雅观的比方,人要上厕所,有男和女的之分,所以上
    则所的过程要知道是男是女,才能确定使用哪间厕所.如果如楼上几个以继承方法的,则是男类、女类(派生类)继承于人类(基类),
    则调用方法为code(人类 人类变量),现在又有问题了,基类到派生类不是隐式
    自动转换的,那么又该如何强制转换呢(不知道是男类还是女类)?所以我才想出了重载的方式,尽管code()方法代码都是一样的,但可以根据引用
    对象的不同来执行。如下:
    A,B,C三个类的实例变量a,b,c
    public void code(A theA)  //调用: code(a)
    public void code(B theB)  //调用: code(b)
    public void code(C theC)  //调用: code(C)To namhyuk(namhyuk) : 用范型可能是一个办法!不知道还有没有其它办法?
      

  8.   

    如果不管传入的对象是什么,code方法的代码都一样,那直接调用不就可以了,为什么还要重载?
      

  9.   

    还不满意?那就老土一些:另外写一个class,做一个静态的公共方法!每个实例、任何地方都可以调用了。
    够土么?
    这个应该个个都知道怎么去做的了。
      

  10.   

    public void code(object theABC)
    {
        // 判断是男是女
        ....
        // 执行共同处理的代码
        ....
    }
    可以放在共通函数类中,也可以做成基类
      

  11.   

    to cangwu_lee(小橙子) :
    是code()方法来引用类的实例对象,而不是类对象来执行code()方法代码。to lovebingye(降龙):
    隐式转为object后,A(或B或C)类的派生方法将不可用。
      

  12.   

    public void code(object obj)
    {
        type t = obj.getType();
        switch (t.toString())
        {
            case "A":
                A xxx = (A) obj;
                break;
            case "B":
                B xxx = (B) obj;
                 ....
        }
        
        xxx.play();
    }
      

  13.   

    to yuanarea(Sail before):
    xxx实例变量有效区只在switch的case子句中,是局部变量,
    xxx.play()无效。我也想过这个办法,呵呵,如果xxx有效区能超出switch就好了。