接口,工厂及反射

 

 1.         接口:
A.        接口的好处:
1)        接口是对继承单根性的扩展(继承只能是单根继承,而接口可以实现多个)。
2)        接口是一种规范和标准,可以约束类的行为(即类的方法)。
3)        接口屏蔽了实现的细节。(即用户只能使用,无法看到代码,体现了接口的安全性)。
4)        接口的使用方便团队协作开发。
5)        接口的通用性。
6)        接口可以作为参数及返回值传递,实际上接口作为参数及返回值时,传递的都是实现了接口的对象。
B.        接口使用的注意事项:
1)        接口中可以包含字段、属性、方法、索引器等,但都不能实现,即可以有,但没有用。接口中只能实现方法。
2)        接口的方法只有方法的声明,没有方法体,这一点与抽象方法想同。示例如下:
public interface IPerson
              {
                string Run();//只有方法声明而没有方法体
}
2.         工厂模式:
工厂模式与现实中的工厂差不多,现实中的工厂是生产实体产品的,而.NET中的工厂模式是产生类的对象的。
3.         反射:
反射的作用:1、可以了解程序集的内部结构。
                     2、可以动态创建类实例 //重点
反射动态创建类实例的示例:
#region 反射动态生成本程序集类对象
        private void button3_Click(object sender, EventArgs e)
        {
            IPerson person = null;
            InterfaceFactory factory = new InterfaceFactory();
            //需要动态生成的类名,由类所在的命名空间和类名组成
            string className = "";
            if (rdbWritePerson.Checked)
            {
                className = "InterfaceTest.WritePerson";
            }
            if (rdbBlackPerson.Checked)
            {
                className = "InterfaceTest.BlackPerson";
            }
            person = (IPerson)factory.DynamicCreatPerson(className);
            MessageBox.Show(person.Run());
        }
         public IPerson DynamicCreatPerson(string className)
        {
            IPerson person = null;
            //根据类名获得产生对象的类型
            Type type = System.Type.GetType(className);
            //根据类型产生对象
            person = (IPerson)System.Activator.CreateInstance(type );//重点
            return person;
        }
        #endregion

        #region 反射动态生成外部程序集对象
        private void button4_Click(object sender, EventArgs e)
        {
            IChinesePerson chinesePerson = null;

            //程序集的名字
            string assemblyName = "ChinesePersonFactory";

            //需要动态生成的类名,由类所在的命名空间和类名组成
            string className = "ChinesePersonFactory.ChinesePerson";

            //动态生成类的对象
            chinesePerson = (IChinesePerson)System.Reflection.Assembly.Load(assemblyName).CreateInstance(className); //重点
            MessageBox.Show(chinesePerson.Say());
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值