//解决方案一://Interf.cs   在项目InterF中
namespace InterF
{
    public interface I_InterF
    {
        string F();
    }
}
//A.cs  在项目A中
using InterF
namespace A
{
    public class A_Class:I_InterF      //继承 InterF 接口
    {
        public string F()              //实现 InterF 中的 F()
        {
           return "aaaaaaa";
        }
    }
}
//B.cs  在项目B中
using InterF
namespace B
{
    public class B_Class:I_InterF     //继承 InterF 接口
    {
        public string F()             //实现 InterF 中的 F()
        {
           return "bbbbbbb";
        }
    }
}
//Factory.cs 在项目Factory中
namespace Fac
{
    public class Fac_Class
    {
       public I_InterF Fac_Function
       {
          string assumellyName = ConfigurationManager.AppSettings["AssumelyName"];
          string constructorName = ConfigurationManager.AppSettings["ConstructorName"];
          return (I_InterF)Assembly.Load(assumellyName).CreateInstance(constructorName);
       }
    }
}
//web.config  
    <add key="AssumelyName" value="A"/>
    <add key="ConstructorName" value="A.A_Class"/>
//Test.cs  在项目BLL中
using Fac;
using InterF;namespace BLL
{
    public class BLL_Class
    {
        public string BLL_Funtcion()
        {
           return (new Fac_Class()).Fac_Function().F();
        }
    }
}-------------------------------------------------------------------------------
//解决方案二:
//A.cs  在项目A中
namespace A
{
    public class A_Class   
    {
        public string F()     
        {
           return "aaaaaaa";
        }
    }
}
//B.cs  在项目B中
namespace B
{
    public class B_Class
    {
        public string F()       
        {
           return "bbbbbbb";
        }
    }
}
//Factory.cs 在项目Factory中
namespace Fac
{
    public class Fac_Class
    {
       public Object Fac_Function
       {
          string assumellyName = ConfigurationManager.AppSettings["AssumelyName"];
          string constructorName = ConfigurationManager.AppSettings["ConstructorName"];
          return Assembly.Load(assumellyName).CreateInstance(constructorName);
       }
    }
}
//web.config  
    <add key="AssumelyName" value="A"/>
    <add key="ConstructorName" value="A.A_Class"/>
//Test.cs  在项目BLL中using Fac;
using A;
using B;
namespace BLL
{
    public class BLL_Class
    {
        public string BLL_Funtcion()
        {
           return (new Fac_Class()).Fac_Function().F();
        }
    }
}
问题一:  解决方案一
在Factory.cs中制造了A的对象已接口InterF的方式返回,在 BLL中调用的是
Interf.cs中的F(),虽然A.cs和B.cs都继承了InterF的接口,为什么调用Interf.cs中的F()
就能得到  "aaaaaaa"  应该是调用A中的F()才能得到的呀
问题二:    解决方案二
没有使用接口,A中有个F(),B中也有个F() 分别再两个命名空间中(A,B)
制造一个A的对象:(new Fac_Class()).Fac_Function()
调用A中的方法:(new Fac_Class()).Fac_Function().F()  会出错
A中的F(),B中的F() 不是再两个命名空间中的吗,为什么会出错

解决方案 »

  1.   

    哈哈,,分是太少了,不好意思,没有修改的功能,改不了了.一会我补一贴,哪位兄弟回答了上面的问题后进"补分贴-关于反射(Assumeblly)的问题 "去跟个帖,再那里再给分,谢谢!
      

  2.   

    问题一:问题在于你创建的是A的实例啊,A的实例被通过InterF引用调用F方法得到  "aaaaaaa"不是很正常吗?你认为应该得到什么?、
    问题二:出错很正常啊,原因不在于A和B的共存而在于(new Fac_Class()).Fac_Function()创建的是一个object,而object根本没有F这个方法。
      

  3.   

    补分帖地址:http://community.csdn.net/Expert/topic/5103/5103453.xml?temp=.7687036
      

  4.   

    To : aafshzj(上海北京) ( ) 信誉:100    Blog 你的第二个问题的回答我可以理解了,可以把Test.cs修改成以下的方法让他能正确运行:
    //Test.cs  在项目BLL中using Fac;
    using A;
    using B;
    namespace BLL
    {
        public class BLL_Class
        {
            public string BLL_Funtcion()
            {
               object typeObject=(new Fac_Class()).Fac_Function().F();
               if(typeObject is A.A_Class)
                  return ((A.A_Class)typeObject).F();
               if(typeObject is B.B_Class)
                 return ((B.B_Class)typeObject).F();
            }
        }
    }
      

  5.   

    对于你的第一个问题的回来我还是不理解,能不能解释清楚点.
    InterF是怎么引用调用A中的F()来得到"aaaaaaa"的
      

  6.   

    InterF只是接口,可以被看作纯Abstract类型。它的所有方法相当于默认加了abstract/virtual修饰符的,实现接口的类型的接口方法相当于默认加了override方法的。这意味着什么呢?意味着InterF引用的实例在执行借口方法时,将执行其实现类型的方法。这也很自然,因为接口方法都是没实现的空方法(不是方法体为空,是方法本身实际上就相当于空指针),也只有实现其具体实例的实际类型方法才合适。实际上所有类型实例,无论其以什么基类型被引用,其实际执行的基类方法都是override层层覆盖中最后覆盖的一个,也就是实际实例的方法(不考虑new 修饰符中断override覆盖的情况)。