我用c#winform做了一个程序,在一个公共类里写了一个虚方法,然后又分别在两个类里重写了这个方法。
在程序的两个界面分别调用这个虚方法,这两个界面一个界面是实现一个重写类里的方法,另一个界面调用另一个重写类里的方法该如何实现呢。

解决方案 »

  1.   

    公共类 class1=new 类1();
    class1.Method();
    公共类 class2=new 类2();
    class2.Method();
    我醉了,回答的错了咋办?
      

  2.   

    也学我说的不够具体是这样的
    我现在两个界面都调用同样的方法,只是数据不同,所以呢
    就写了在idatabase 里写了虚方法 searth()。
    然后又写了两个类a,b
    a和b都对虚方法做了重写
    现在我写了个公共方法t.
    t直接调用idatabase的虚方法。
    现在我两个界面都调用t中我写的方法
    要解决的就是能让
    一个界面调用的是a类中重写的那个方法
    一个界面吊样b类中重写的方法
    请大家帮忙!!!!!!!!
      

  3.   

    首先假设公共类为class1;
    第一个重写类为class2;
    第二个重写类为class3;
    虚方法为method();
    class1 a=new class2();
    a.method();//调用class2的重写方法(也可以把class1换成class2)
    class1 a=new class3();
    a.method();//调用class3的重写方法(也可以把class1换成class3)
      

  4.   

    t 中 虚方法的引用 你在哪里 给初始化的?想实现哪个子类的方法 就用那个子类实例化,  要不不久nullreference了。 -。-你的程序是不是还没跑起来呢。。
      

  5.   

    使用反射:using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ReflectionTest
    {
       public class BaseType
        {
           public BaseType()
           {
           }       public virtual string GetInitValue()
           {
               return this.GetType().Name;
           }       public virtual string GetSearchValue()
           {
               return "BaseSearch";
           }
        }
    }using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ReflectionTest
    {
       public class TestA:BaseType
        {
           public TestA()
           {
           }       private string _value;       public string Value
           {
               get { return _value; }
               set { _value = value; }
           }
           public override string GetInitValue()
           {
               return this.GetType().Name;
           }
        }
    }测试:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ReflectionTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                BaseType baseType = new BaseType();
                baseType = (BaseType)getInstance("ReflectionTest.TestA");            //strSearchValue = BaseSearch
                string strSearchValue = baseType.GetSearchValue();            //strValue = TestA
                string strValue = baseType.GetInitValue();        }        public static Object getInstance(string strTypeName)
            {
                Type t = Type.GetType(strTypeName);
                if (t == null)
                {
                    return null;
                }            return Activator.CreateInstance(t);
            }
        }
    }
      

  6.   

    首先假设公共类为class1; 
    第一个重写类为class2; 
    第二个重写类为class3; 
    虚方法为method(); 
    class1 a=new class2(); 
    a.method();//调用class2的重写方法(也可以把class1换成class2) 
    class1 a=new class3(); 
    a.method();//调用class3的重写方法(也可以把class1换成class3)
      

  7.   

    我的业务操作类要引用虚方法类里的虚方法。
    然后在不同界面引用业务操作类的时候,分清楚是引用那个重写类的,是class1.class2
      

  8.   

    必须强制类型转换,使用as关键字转换,如果返回null则转换失败,返回class1或者class2对象,则转换成功。然后直接调用转换后的重载方法,即可实现多态。
      

  9.   

    object obj = new class2();class1 obj1 = obj as class1;
    if(obj1 != null)
    {
        //执行重载的方法
    }class2 obj2 = obj as class2;
    if(obj2 != null)
    {
        //执行重载的方法
    }
      

  10.   

    也许我语言水平有限表述的不够清楚就用代码显示一下:
    public   class   Base   //基类   
      {   
            pulbic   virtual   void   area()   
            {...}   
      }   
        
      pulbic   class   A:Base     //派生类   
      {   
            pulbic   override   void   area()   
            {...}   
      }   
      pulbic   class   B:Base   
      {   
            pulbic   override   void   area()   
            {...}   
      }   
        public   class   C  //  公共类 
      {   
            Base base=new Base()
            pulbic   void   Search()   
            {
                //引用虚方法area() ;  
            }   
      }
    在两个界面中应用这个公共类方法c 的时候
    界面一:
     pulbic   class   界面一
      {   
           C c=new  C();
           ///应用Search()方法,这个时候他调用的是派生类A的实现方法该如何实现
            
      }  
      pulbic   class   界面2
      {   
           C c=new  C();
           ///应用Search()方法,这个时候他调用的是派生类B的实现方法该如何实现
            
      }