zoukankan      html  css  js  c++  java
  • C# 动态加载dll(.net)示例

    dll函数库源码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    namespace cl1
    {
        public class Class1
        {
            private  string Name;
            private int Age;
            public Class1() { Name = "name"; Age = 0; }
            public Class1(string name) { Name = name; Age = 0; }
            public Class1(string name,int age) { Name = name; Age = age; }
            public static void M1()
            {
                MessageBox.Show("静态无参函数");
            }
            public static void M2(string name)
            {
                MessageBox.Show($"静态带参函数String{name}");
            }
            public static void M2(string name, int age)
            {
                MessageBox.Show($"静态带参函数int{name+age}");
            }
            public void M3()
            {
                MessageBox.Show($"非静态无参函数name={Name},age={Age}");
            }
            public void M4(string name)
            {
                MessageBox.Show($"非静态带参函数string{name}");
            }
            public void M4(int age)
            {
                MessageBox.Show($"非静态带参函数int{age}");
            }
            public void M5(string name) { MessageBox.Show(name); }
        }
    }
    View Code

    调用尝试

    public static void test()
            {
                Assembly assembly;
                Type type;
    
                string path = @"G:BaseSelfBasiccl1inDebugcl1.dll";
                assembly = Assembly.LoadFrom(path);
                //获取程序集实例中具有指定名称的Type对象
                type = assembly.GetType("cl1.Class1");
                //获取Class1对象
                var C1 = Activator.CreateInstance(type);//构造函数public Class1() 
                var C2 = Activator.CreateInstance(type, "string");//构造函数public Class1(string name) 
                var C3 = Activator.CreateInstance(type, "string", 123);//构造函数public Class1(string name,int age) 
                //获取方法
                var m1 = type.GetMethod("M1");//方法名M1在Class1类中没有重载,获取明确 方法为私有或不存在时返回null
                var val1 = m1.Invoke(null, null);//运行m1 M1函数为静态的,且无参,Invoke中参数可为null
    
                var m2 = type.GetMethod("M2", new Type[] { typeof(string) });//获取public static void M2(string name)
                var val2 = m2.Invoke(null, new object[] { "str" });//运行m2
    
                var m3 = type.GetMethod("M2", new Type[] { typeof(string), typeof(int) });//获取public static void M2(string name, int age)
                var val3 = m3.Invoke(null, new object[] { "str", 124 });//运行m3
    
                //非静态函数的获取及调用
                var m4 = type.GetMethod("M3");
                var val4 = m4.Invoke(C1, null);
                val4 = m4.Invoke(C2, null);
                val4 = m4.Invoke(C3, null);
    
                var m5 = type.GetMethod("M4", new Type[] { typeof(string) });
                var val5 = m5.Invoke(C1, new object[] { "dtr" });
                val5 = m5.Invoke(C2, new object[] { "dtr" });
                val5 = m5.Invoke(C3, new object[] { "dtr" });
    
                var m6 = type.GetMethod("M4", new Type[] { typeof(int) });
                var val6 = m6.Invoke(C1, new object[] { 225 });
                val6 = m6.Invoke(C2, new object[] { 225 });
                val6 = m6.Invoke(C3, new object[] { 225 });
            }
    View Code
  • 相关阅读:
    Euraka适合初学者的简单小demo
    springboot中常用的依赖
    SpringBoot的入门程序
    spring-data-solr查询
    SpringBoot整合Redis
    SpringBoot整合MyBatis
    使用swagger2生成文档
    SpringBoot整合Spring Data JPA
    SpringBoot构建RESTful API
    SpringBoot属性配置
  • 原文地址:https://www.cnblogs.com/-hwh/p/13402531.html
Copyright © 2011-2022 走看看