a类中有Show的方法,b类中也有一个Show的方法,我想根据不同的情况来定义类,然后调用同名方法例如:
class a 
{
  public int show(int i)
  {
  //实现代码
   }
}
class b 
{
  public int show(int i)
  {
  //实现代码
   }
}现在我想在实现类似的功能要怎么做
if (i == 1)
{
a c = new a();
}
else
{
b c = new b();
}
c.set(i);

解决方案 »

  1.   

    1、实例化需要调用的那个类,譬如a实例名为z ,注意a,b两个类的实例名不能一样都为c
    2、z.show()就是调a里面的show()方法了  
      

  2.   

    如果按OOP,这是典型的多态,标准做法是先定义一个接口,然后这两个类实现这两个接口。
      

  3.   

    oop的继承多态
    a类和b类都继承c 类为父类。public Class c
    {
      public int show(int i) 
      { 
      } 
    }public Class a:c
    {
      public int show(int i) 
      { 
      //实现代码 
      } 
    }public Class b:c
    {
       public int show(int i) 
      { 
      //实现代码 
      } 
    }c f;
    if (i == 1) 

      f = new a();

    else 

      f = new b(); 
    }
    f.show(i);
      

  4.   

    上面有误,请参考下面
    public Class c
    {
      public virtual int show(int i) 
      { 
      } 
    }public Class a:c
    {
      //重写父类方法
      public override int show(int i) 
      { 
      //实现代码 
      } 
    }public Class b:c
    {
       //重写父类方法
       public override int show(int i) 
      { 
      //实现代码 
      } 
    }c f;
    if (i == 1) 

      f = new a();

    else 

      f = new b(); 
    }
    f.show(i);
      

  5.   

    你的这种写法是有问题的:你的c定义在if else内,最后用c的时候在作用域外,编译器不会知道你最后用的那个c是什么。
    按照你的想法我写了一种实现,测试通过:    public interface Do
        {
            int Show(int i);
        }    public class A:Do
        {
            public int Show(int i)
            {
                return ++i;
            }
        }        public class B:Do
        {
            public int Show(int i)
            {
                return --i;
            }
        }
    //下面是调用代码             int i = int.Parse(textBox1.Text.Trim());
                Do d;
                if (i == 1)
                {
                   d = new A();
                }
                else
                {
                    d = new B();
                }
                tbResult.Text = d.Show(i).ToString();
      

  6.   

    LZ要用OOP方式的话就参考二楼和五楼好了,OOP可维护性好点,概念也清晰。
    父类中定义一个虚函数(必须是虚函数)
    分别在两个子类中重写这个虚函数
    不过多态的优势是根据参数自动定位到相应的方法,从LZ的给的框架来看貌似没占啥便宜。
      

  7.   

    1: 继承。写一个基类/接口包含所有同名方法,所有子类都继承自它,以后强转为基类,调用改方法即可
    2:反射,通过反射找到各个类中指定的函数名,invoke调用
      

  8.   

    To: v68v6 快乐老妖(裤衩乃身外之物)更有效率的方法能说说吗?新手见笑了
      

  9.   


    我不是说效率问题,我是说对于极简单应用没必要去OOP。“为了继承而继承,为了多态而多态”,过于技术化,就会进入设计误区。
    当然,这是我一家之言。单纯作为学习目的还是非常有必要去尝试的。
    参看SP1234的回复:
    http://topic.csdn.net/u/20090307/19/74b12486-a3f7-4fcd-90a4-2781af4ce64c.html
      

  10.   

    模式都出来了,还基类继承...2楼就是正解...一个接口的事儿,不要读死书...interface iShow
    {
    int show(int i);
    }class a:iShow

      public int show(int i) 
      { 
      //实现代码 
      } 

    class b:iShow

      public int show(int i) 
      { 
      //实现代码 
      } 
    }iShow c=null;
    if (i == 1) 

    c = new a();

    else 

    c = new b();
    }
    c.show(i);
      

  11.   


    vrhero 从来都是一语惊醒梦中人,呵呵,UP!!!
      

  12.   

    从OOP的角度就是接口
    不过从动态语言的角度,lz要的就是Duck Typing