例:TestA.dll中的部分代码
public class A
{
   public virtual void test()
   {
   }
}
public class C
{
   public void call()
   {
      object obj = GetBO();// 在TestB.dll中根据B反射出来的一个对象,
      ((A)obj).test();// 这里本来是想调用B中test,但是有时候调B.test,有时调A.test
    }
}TestB.dll中的部分代码
public class B:A
{
   public override void test()
   {
   }
}问题:
  强制类型转换时如何调用,按理应该调用A.test,但是为什么会有时候调B.test,有时调A.test。

解决方案 »

  1.   

    如果构造出来的对象真的是B类型的,那么肯定只会调用B.test()。
    关键是你是否确定你构造出来的到底是什么对象?
      

  2.   

    private object GetBO()
    {
    #region 说明
    /*
     * 功能:获取业务对象
     * 
     * 备注:业务类的构造函数
     * 
     * public xxx( op )
     * 
     */
    #endregion
    #region 获取所在类全名
    string strClassFullName = "";
    strClassFullName = nsEnv.trade.GetClassFullName( oe,No );
    if ( IsError() ) return null;
    #endregion
    Type tTmp;
    tTmp = assmServer.GetType(strClassFullName);
    Object obj = Activator.CreateInstance(tTmp,new object[] { op }); return obj; }
      

  3.   

    TO:hainang1234(鼠·神·泪) 
    构造出来的对象真的是B类型的,我采用单步跟踪过去看了的。
      

  4.   

    构造是那个类的实例就调那个类的方法啦。GetBO返回A就是调A的方法。返回B的就是调B的方法。强转换为A,只是因为A是基类。
      

  5.   

    原来自己搞错了,方法test重载了,一个虚方法,一个不是虚方法。