首页 > 编程语言 >刘铁猛C#学习笔记21 反射与依赖注入

刘铁猛C#学习笔记21 反射与依赖注入

时间:2024-02-23 23:33:25浏览次数:25  
标签:反射 插件 刘铁猛 21 C# 程序 接口 依赖 注入

反射

对于一个现有对象,能够在不使用new操作符、不知道其具体静态类型的情况下,创建出一个同类型的对象,还能访问这个复制品对象拥有的各个成员。 相当于进一步的解耦,可以不使用new操作符,就没有类型的依赖关系 这样的耦合关系甚至可以弱到忽略不计 反射在.NET和JAVA中非常重要  

为什么需要反射

很多时候,程序的逻辑不是在写程序的时候就能确定的 有时候是要到用户与程序进行交互的时候,才能确定,此时程序已经处在运行状态(动态状态)   如果要在静态状态(写程序时)预测和枚举出用户可能做出的所有操作,程序可能变的非常臃肿  

反射的性能影响

反射是动态地拿到对对象的描述、类型的描述,再用这些描述创建新的对象,对程序的性能会有负面影响  

示例1:未封装的反射

代码详见C#inVS2/反射与依赖注入/Core反射1-坦克 使用反射需要引用命名空间 实际运用中使用的大多都是封装好的反射  

依赖注入

依赖注入与依赖反转的关系

依赖反转是一个概念 而依赖注入,是在依赖反转概念的基础上,结合接口与反射机制 形成的一种应用

依赖注入具体操作与意义

这是一种在程序开头,通过注册接口绑定一个变量类型 创建实例时通过这个接口创建,不直接通过new+类型 创建 就可以将所有实例创建的紧耦合 转化为 注册时接口与变量类型绑定的一行松耦合   使用了微软提供的容器 依赖注入操作在JAVA的许多框架中也有,但可能换个称呼 有的称作“自动连线”,(将接口与变量类型相连)  

反射应用

“以不变应万变”

应用场景

反射常应用在 【插件式编程】中

插件

插件是不与主体程序一起编译,但是和主体程序一起工作的组件 可以以主体程序为中心,生成一个生态圈 主体与插件的关系就是 “以不变应万变” 的关系,写主体程序时不可能枚举出可能安装的所有插件 SDK:程序开发包,API:程序开发接口  

标签:反射,插件,刘铁猛,21,C#,程序,接口,依赖,注入
From: https://www.cnblogs.com/jk-2048/p/18030584

相关文章

  • C#数据结构 字典Dictionary
    简介字典是C#开发中经常使用的一种键值对容器,类似C++的map,可使用foreach或迭代器遍历不能装多个相同key,底层实现是哈希函数具体用法1.创建Dictionary<key,value>//Key和Value可以是任意类型Dictionary<int,string>_testDic=newDictionary<int,string>();2.添加......
  • 刘铁猛C#学习笔记13 委托1
    “幻想:如果能有一种能把方法当参数的方法就好了”一、什么是委托委托源自C、C++中的函数指针 1.C语言中的函数指针(1)函数的直接调用先准备好一个加法函数,一个减法函数可以通过函数名调用这两个函数,这种调用方法称作直接调用 (2)函数指针的声明、间接调用先按下......
  • C++ 令人无语/好用的语法合集
    此贴用来总结一些傻逼C++语法,或者坑了我很久的写法。1、(坑)重载>,<,==时,千万不要使用pair为基的typedef!!!!!!pii的max不受你的重载影响,它自己有自己的max,然后typedef和define是相同的,基本可以看做直接替换,不会对作用域/命名做区分。2、(坑)lower_bound(..,..,{x......
  • containerd环境搭建指南
    目录一.container概述1.什么是containerd2.为什么要学习containerd二.基于yum方式安装containerd1.获取软件源2.查看yum源中containerd软件版本3.安装containerd的4.查看containerd的版本信息5.设置containerd开机自启动6.查看containerd的客户端和服务端的版本信息三.基于二进制......
  • SciTech-EECS-PCB电路板设计-使用KiCad进行PCB设计的基本流程
    使用KiCad进行PCB设计的基本流程,2024-02-2314:04KiCad是一款强大的开源PCB设计软件,其设计的大体流程包括:原理图设计及导出网表文件,PCB布局和布线,导出Gerber文件及制板;以下是使用KiCad进行PCB设计的基本步骤:0.安装KiCad:首先,你需要安装KiCad软件。KiCad官方网站下载......
  • 刘铁猛C#学习笔记10 字段、属性
    这四种东西都是用来表达数据的一、字段(成员变量)曾用名:成员变量是为一个对象或类型存储数据的变量,区别于方法体中的局部变量多个字段组合起来可以表示对象当前的状态起源:C语言中结构体的成员变量一个对象占用的内存空间会被分配给各个字段1.实例字段和静态字段可以分为......
  • 刘铁猛C#学习笔记11 索引器、常量
    一、索引器[]概述使一个对象可以像数组一样用方括号[]去访问其元素ex:字典的声明 1.索引器的声明首先像上文那样声明一个字典Dictionary<,>在VS中输入indexer,然后敲两下tab就能得到:(按下tab可以跳到下一个可编辑项上)第一个类型参数为返回值的类型,第二个类型参数为......
  • 刘铁猛C#学习笔记12 参数种类详解
    一、值参数(传值参数、值传递)指参数的种类为值参数,而非参数数据类型为值类型1.值类型的传值参数类似一个新声明的局部变量,或传进来的实参的一个副本可以在方法体内重现赋值,但其在方法体内被赋值时,不会影响传进来的本体 2.引用类型的传值参数引用类型变量存储的是实例......
  • 代码随想录算法训练营day03 | leetcode 203. 移除链表元素、707. 设计链表、206. 反转
    目录题目链接:203.移除链表元素-简单题目链接:707.设计链表-中等题目链接:206.反转链表-简单题目链接:203.移除链表元素-简单题目描述:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6......
  • 恢复VCPkg(2023-01-27)中Vtk[Qt]的默认依赖为Qt5
    通过查看vtk的更新的日志已于2023-01-27将默认依赖的Qt的版本由5更新到6gitlog--.\ports\vtkcommit27fb19bdcc1f6ddb1261cffb5372724ac1d63a93Author:LilyWang<[email protected]>Date:2023-08-23[manyports]FixURLSofdownlo......