C#详解:程序域、程序集、模块、Type、反射

news2024/9/29 13:29:40

总结:

">>>":代表包含
进程>>>应用程序域AppDomain>>>程序集Assembly>>>模块Module>>>类型Type>>>成员(方法、属性等)

1、程序集Assembly

如图,假设一个解决方案里创建有多个项目:
(1)SuperControl:*要启动的主项目*
(2)ClassLibrary1:主项目需要引用的自定义的类库
(3)WindowsFormsApplication1:和主项目无关,没有引用关系
(4)主项目里引用的系统的其他DLL程序集:如System.Windows.Forms
程序开始运行后,就会建立一个应用程序域,其中包含多个程序集,有(1)(2)(4)。
每个程序集可以理解为一个单独的项目。

使用Assembly.GetExecutingAssembly()可以获取当前执行代码的程序集,可以理解为获取当前的主项目SuperControl。使用AppDomain.CurrentDomain.GetAssemblies()可以获取当前应用程序域中所有用到的程序集。如下图。

补充:
如果运行的项目SuperControl中引用了类库ClassLibrary1,也引用了命名空间using ClassLibrary1。但实际代码里没有用到ClassLibrary1项目中的任何东西,使用AppDomain.CurrentDomain.GetAssemblies()就不会获取到名为ClassLibrary1的程序集

2、模块Module

以程序集SuperControl为例,其中包含的模块只有一个SuperControl.exe的可执行程序。

3、类型Type

1、就是类class,结构体struct,枚举enum等,都是属于类型Type。
2、如果用到反射就需要拿到具体的类型Type。有了类型Type就等于有了这个类内部的所有信息,以后就可以任意的动态生成一个新的实例,或者动态改变原来实例的数据。
3、如果要获取某个项目(即程序集Assembly)里面定义的类,可以用程序集Assembly,也可以用Module来获取,因为它们近乎是一个东西,单个程序集Assembly里主要的东西就是那个.exe或者.dll模块。程序集Assembly>>>模块Module。
例:

 Assembly assembly = Assembly.GetExecutingAssembly();//获取当前项目程序集
            Type[] types = assembly.GetTypes();

 Assembly assembly = Assembly.GetExecutingAssembly();//获取当前项目程序集
       Module module = assembly.GetModule("SuperControl.exe");//获取里面的模块
            types = module.GetTypes();//获取里面所有的类型

 

4、反射:动态生成项目SuperControl中类名为SubForm的实例

//Assembly assembly = //Assembly.LoadFrom(@"C:\Users\Administrator\Desktop\TEST\ControlMoveTEST\SuperControl\
//SuperControl\bin\Debug\SuperControl");

  Assembly asy = Assembly.GetExecutingAssembly();
  object obj = asy.CreateInstance("SuperControl.SubForm");//填类型全名,包括命名空间
//如果要操作其他的项目程序集里的内容,就获取别的项目的Assembly。

//(1)显示窗体方式1
	((SubForm)obj).Show();//显示窗体
//(2)显示窗体方式2
   Type typeInfo = asy.GetType("SuperControl.SubForm");//填类型全名,包括命名空间
   MethodInfo minfo = typeInfo.GetMethod("Show",new Type[]{});//显示窗体1
   minfo.Invoke(obj, null);//显示窗体2
//(3) 设置窗体的启动位置
   typeInfo.GetProperty("StartPosition").SetValue(obj, FormStartPosition.CenterScreen);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM 自己动手安装交叉编译工具链

一、Windows中装软件的特点 Windows中装软件使用安装包,安装包解压后有2种情况: 一种是一个安装文件(.exe .msi),双击进行安装,下一步直到安装完毕。安装完毕后会在桌面上生成快捷方式,我们平…

(附源码)ssm招聘网站 毕业设计 250858

SSM招聘网站 摘 要 招聘网站采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员、用户、企业三部分,管理员管理主要功能包括:首页、站点管理(轮播图、公告栏)用户管理(管理员、应聘用户、企业用户…

重点| 系统集成项目管理工程师考前50个知识点(2)

本文章总结了系统集成项目管理工程师考试背记50个知识点!!! 帮助大家更好的复习,希望能对大家有所帮助 比较长,放了部分,需要可私信!! 11、项目目标包括成果性目标和约束性目标。项…

直播倒计时,PyTorch Conference 2022 今晚开启

内容一览:PyTorch Conference 2022 即将在美国南部城市新奥尔良举办。本次会议将带来技术讲座、项目演示及最佳案例分享。 本文首发自微信公众号:PyTorch 开发者社区 关键词:PyTorch 深度学习 机器学习 PyTorch Conference 2022 今晚开启 自…

360crawlergo结合xray被动扫描

360crawlergo结合xray被动扫描 360crawlergo结合xray被动扫描安装配置 360crawlergo结合xray被动扫描 安装 Xray https://github.com/chaitin/xraycrawlergo_x_XRAY https://github.com/timwhitez/crawlergo_x_XRAYcrawlergo https://github.com/0Kee-Team/crawlergo 更多的…

高等数值计算方法学习笔记第7章【非线性方程组求根】

高等数值计算方法学习笔记第7章【非线性方程组求根】一、方程求根与二分法(第五次课)二、不动点迭代法及其收敛性1.不动点迭代与不动点迭代法(一个例题)2.不动点的存在性与迭代法的收敛性(两个定理,两例题&…

计算机网络——常考的面试题

什么是TCP/IP? TCP建立连接为什么要三次握手?断开连接为什么要四次挥手? SSL/TSL握手过程? 1、网络分层模型 OSI:全称叫Open System Interconnection (开放式系统互联),是国际标准化组织ISO制定的理论模…

【软件测试】面试老约不到?软件测试简历项目经验怎么写?论项目经验的重要性......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 随着就业竞争越来越…

(五)共享模型之管程【wait notify 】

一、wait notify 1. 小故事 - 为什么需要 wait 2. 原理之 wait / notify (1)Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态。 (2)BLOCKED 和WAITING 的线程都处于阻塞状…

[附源码]计算机毕业设计springboot线上社区管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

全力护航!广西移动圆满完成区运会通信保障任务

11月23日晚,广西壮族自治区第十五届运动会在贵港市体育中心闭幕。作为区域主导通信运营商,广西移动贵港分公司充分发挥5G网络技术优势,与贵港市政府、区运会组委会紧密合作,全力以赴为运动会提供了先进、高效的通信服务保障。 广西…

PAT (甲级) 2022年秋季考试 c++ 满分题解

PAT (甲级) 2022年秋季考试 c 满分题解 7-1 Balloon Popping 分数 20 原题 算法标签 模拟 枚举 思路 枚举数组元素, 判断每个元素覆盖气球数, 记录最多可覆盖气球数及最多可覆盖气球数开始下标, 则最小开始值为最后可覆盖气球位置减高度H 代码 #…

matlab如何滤除低频尖峰脉冲

有时,数据会出现不必要的瞬态或尖峰。可以用中值过滤消除它们。 最近我们被客户要求撰写关于信号滤除脉冲数据的研究报告,包括一些图形和统计输出。 在存在60 Hz电源线噪声的情况下,考虑模拟仪器输入端的开环电压。采样率为1 kHz。 fs …

基于Python pygame简易版斗兽棋小游戏源代码

基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼>狗>猫>鼠>象 2.同类棋子先行者吃掉对方 3.老鼠可以进河,老鼠在河里时,岸上的动物不能捕食他…

Jmeter常用函数用法详解

Jmeter函数官网帮助手册:https://jmeter.apache.org/usermanual/functions.html#__BeanShell 1.__intSum:计算两个或多个整数值的和 参数是否必传第一个int值是第二个int值是第n个int值否变量名否 eg: ${__intSum(1,2)} //return 123 ${__intSum(1,2,3)} //return …

(8)点云数据处理学习——ICP registration(迭代最近点)

1、主要参考 (1)官方介绍地址 ICP registration — Open3D 0.16.0 documentation 2、介绍 2.1 原理 (1)关于ICP registration 本教程演示ICP(迭代最近点)配准算法。多年来,它一直是研究和工业中几何配准的支柱。输…

股票接口怎么解析股票历史数据?

最近有很多投资者在研究股票接口怎么解析股票历史数据,然后执行自动交易等方面对开发股票数据接口的深入思考。其实在小编看来,这就需要先获取股票的每日数据,那么就会使用Python来解析股票历史数据,下面小编就简要介绍使用Python…

Java8-Stream流详细教程

前言 1、什么是Stream 前面我们讲了Lambda表达式与Optional类,下面我们将会使用这两个新特性,特别是Lambda。 Stream 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列 集合讲的是数据,Stream讲的是计算! 注…

Java 守护线程

✨✨hello,愿意点进来的小伙伴们,你们好呐! 🐻🐻系列专栏:【JavaEE初阶】 🐲🐲本篇内容:详解守护线程 🐯🐯作者简介:一名现大二的三非编程小白&am…

什么是云计算?什么是边缘计算?为什么需要云边协同?

一、云计算的发展有哪些弊端? **云计算(cloud computing)**是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序…