关于反射获取Dll代码

news/2024/5/19 5:44:22 标签: 反射

工具方面
推荐ILSpy
https://www.cr173.com/soft/30697.html 下载
打开拖入dll 文件即可
如何生成dll 文件
新建一个动态链接库项目
在这里插入图片描述
右上角是绿色的C# 别弄成VB 了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestDll
{
    public class Testdll1
    {
        private static int privateMember = 6 ; //dll 中的私有变量
        private static void PrivateStaticFunc()
        {
            Console.WriteLine("使用Dll文件的PrivateStaticFunc方法");
        }
        private  void PrivateFunc()
        {
            Console.WriteLine("使用Dll文件的PrivateFunc方法");
        }
        public static void StaticFunc()
        {
            Console.WriteLine("使用Dll文件的StaticFunc方法");
        }
        public void UseDllFunc1()
        {
            
            Console.WriteLine("使用Dll文件的UseDllFunc1方法");
        }
    }
}

右键点击生成
在这里插入图片描述
在这里能找到dll 文件
在这里插入图片描述
现在我想在其他项目引用dll 文件
可以把dll 文件拖到Unity 目录中放到Android /Plugins 下面即可

也可以新建一个控制台应用程序

在依赖项添加项目引用即可用到上面的dll 文件
在这里插入图片描述

using System;
using System.Reflection;
using TestDll;
namespace UseDll1
{
    class Program
    {
        static void Main(string[] args)
        {
            Testdll1 testdll1 = new Testdll1();
            testdll1.UseDllFunc1();
            Testdll1.StaticFunc();
            //获私方法
            //Type type = testdll1.GetType();
            //MethodInfo methodInfo = type.GetMethod("PrivateFunc", BindingFlags.Instance | BindingFlags.NonPublic);
            //object obj = System.Activator.CreateInstance(type);
            //object[] parameters = new object[] { };
            //object i = methodInfo.Invoke(obj, parameters);
            //获私字段
            //Type type = testdll1.GetType();
            //FieldInfo field = type.GetField("privateMember", BindingFlags.Instance | BindingFlags.NonPublic|BindingFlags.Public);
            //Console.WriteLine(field);
            //Console.WriteLine(field.GetValue(testdll1));
            //获所有私字段  
            //FieldInfo[] fields = type.GetFields( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
            Console.WriteLine(fields[0]);
            //Console.WriteLine(fields[0].GetValue(testdll1));
            //获所有私静态字段  
            //Type type = testdll1.GetType();
            //FieldInfo field1 = type.GetField("privateMember" ,BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
            //Console.WriteLine(field1);
            //Console.WriteLine(field1.GetValue(testdll1));
        }
    }
}

获取什么样的类型可以在

BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static

里面添加


http://www.niftyadmin.cn/n/769915.html

相关文章

Get Post Put Delete 的区别

Http协议,发起请求成功,首先是通过DNS域名解析器,将www.baidu.com这个域名,解析到正确的ip地址的服务器上,一般情况没有指定后面具体的资源,浏览器会将自动定位到根目录”/“下即将www.baidu.com拼凑成www.…

const和readonly的区别

const和readonly的区别 const是静态常量,const是编译时常量;readonly是动态常量,是运行时常量,const较高效,readonly较灵活。 1.const默认是静态的,只能由类型来访问,不能与static同时使用&…

Jenkins配置钉钉

Jenkins开发之——构建钉钉通知 https://www.dtmao.cc/news_show_508516.shtml 2020/12/17 16:15:15 0人评论 28次 文章标签: 一 概述 Jenkins插件文档Jenkins钉钉插件钉钉配置机器人Jenkins钉钉配置测试 二 Jenkins插件文档 钉钉插件Github钉钉机器人插件文档 三 Jenkins钉钉插…

Jenkins配置QQ邮箱

Jenkins配置QQ邮箱发送邮件 由 若如初见. 提交于 2020-04-10 03:45:17 1.登陆QQ邮箱 在“帐户”里开启“POP3/SMTP”并获取授权码 发送短信验证验证后得到下面验证码 aeoygabszxfecbdj #验证吗 点击确定之后,服务已经开启 Jenkins配置 在Jenkins的“系统管理”-…

Unity 改版后的一些变化

升级到 Unity 2018.3 改进了预制件 预制件自动升级到新预制件系统。预制件工作流程已更改,从而支持预制件嵌套。要编辑预制件,现在需要在预制件模式下将其打开。无法再在 Project Browser 中编辑预制件。还可以在预制件模式中进行结构更改,例…

IntelliJ IDEA debug调试小结

注:本文以 IntelliJ IDEA build: #IC-162.2032.8 为例 准备调试代码 1.设置断点:选择代码行,点击行号后面的区域或者CtrlF8 2.开启调试:点击小虫子或者用快捷键ShiftF9(编译:shiftF10) 上图…

快速打开windows任务管理器

使用组合快捷键: CtrlAltDelete, 然后选择 Start Task Manager(启动任务管理器)使用组合快捷键: CtrlShiftEsc使用组合快捷键: WindowsR , 然后输入taskmgr 在文件查找中输入 ‘C:\Windows\System32\taskmgr.exe’&…

The VMRC console has disconnected solution

在windows上使用VMWare的时候,有时候会出现连接不上的情况: VMWare上会出现“The VMRC console has disconnected…attempting to reconnect”的提示,以下是解决办法: 1. 首先关掉你的vsphere client 2. 然后打开任务管理器(可…