反射入门

反射是对DLL的动态使用,与添加引用的区别:

反射不需要引用
只要知道你的dll所在的位置,dll文件的名称,内部的方法名
就可以GetMethod来获取方法   就可以直接拿来用

和引用差不多,楼主的意思是,我既然可以引用进来直接使用,为什么还要用反射这种执行效率底下的方法是不是?

引用执行效率是高,但是你dll文件很多呢?就像电视台:中央一套.dll,中央二套.dll.....上百个dll文件
你都要添加一次?    
当这个页面用到那份dll的概率比较小并且dll文件是动态的,这时候  你可以用变量存储dll文件的名称
来动态反射,避免多余的添加引用,这样方便 也比较合理,万一浙江又多开了几个电视台,你也不用就改程序了
反正是动态的  管他新建电视台还是删除电视台,我只反射传进来的dll文件名

反射使用:

新建类库:

 
public class Class1
    {
        public Class1()
        { }
        public string ShowMessage(string s)
        {
            return "你打印的信息为:"+s;
        }
        public string ShowName(string name)
        {
            return "你的名字为:"+name;
        }
    }

  

保存路径为:E:\ClassLibrary1.dll

使用反射:

static void Main(string[] args)
        {
            System.Reflection.Assembly ass;
            Type type;
            object obj;
            try
            {
                ass = System.Reflection.Assembly.LoadFile(@"E:\ClassLibrary1.dll");
                type = ass.GetType("ClassLibrary1.Class1");
                System.Reflection.MethodInfo method = type.GetMethod("ShowMessage");
                obj = ass.CreateInstance("ClassLibrary1.Class1");
                string s = (string)method.Invoke(obj, new string[] { "这是一个信息" });

                Console.WriteLine(s);
                method = type.GetMethod("ShowName");
                s = (string)method.Invoke(obj,new string[]{ "lvyafei"});
                Console.WriteLine(s);
                method = null;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                ass = null;
                type = null;
                obj = null;
            }
        }

  

原文地址:https://www.cnblogs.com/lvfeilong/p/fsfdsfsdfsdfsd.html