public partial class TestReflection : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //直接实例化ChineseName,调用 ShowName() 方法
            ChineseName cn = new ChineseName();
            Response.Write(cn.ShowName());

            //通过 工厂类(Factory) 实例化ChineseName ,调用ShowName() 方法
            IName iname = null;
            Factory factory = new Factory();
            iname = (IName)factory.MakeCn();
            Response.Write(iname.ShowName());

            //通过工厂类(AbstractFactory) 实例化ChineseName ,调用ShowName() 方法
            IName name = AbstractFactory.GetName();
            string s = name.ShowName();
            Response.Write(s);
          
        }
    }


    public class Factory
    {
        public object MakeCn()
        {
            return (object)new ChineseName();
        }
        public object MakeEn()
        {
            return (object)new EnglishName();
        }
    }

     public class AbstractFactory
     {
       public static IName GetName()
        {
            //反射机制(动态调用类及类方法)
            //s的值以后从Web.config动态获取
            //把s赋值为:TestReflection.EnglishName,将显示英文名
            string s = "MyTest.UI.ChineseName";
            IName name = (IName)Assembly.Load("MyTest.UI").CreateInstance(s);
            return name;
        }
   }

  

    //声明一个接口,它有一个显示"名字"的功能
    public interface IName
    {
        string ShowName();
    }

    //实现接口,显示中国名字
    public class ChineseName : IName
    {
        public string ShowName()
        {
           // Response.Write("中文名");
            return ("我叫AX!");

        }
    }

    //实现接口,显示英国名字
   public class EnglishName:IName
   {
       public string ShowName()
        {
            //Response.Write("English Name");
            return ("my name is AX!");
       }
    }

posted on 2008-05-03 17:43  Rooter  阅读(126)  评论(0)    收藏  举报