第十九节 反射、特性
视频链接:刘铁猛老师的《C#语言入门详解》
https://www.youtube.com/watch?v=EgIbwCnQ680&list=PLZX6sKChTg8GQxnABqxYGX2zLs4Hfa4Ca
反射和特性的使用示例在追求更松的耦合那一块。
不是C#语言的功能,而是.net 框架的功能。
注意:
(1) .net framework 和 .net core 的反射API有些不同。
(2)反射是动态的在内存里面去拿到对象与它绑定类型的描述,用这些描述去创建对象(不是直接new),会影响性能,避免过多的使用。
示例:原理(一般不这么用,用封装好的)
依赖注入
依赖注入是依赖反转这个概念上,结合接口和反射机制形成的一个应用
依赖注入要借助框架。
- .net core 借助的框架为:
示例:基本使用
示例2: 用注册的类型创建实例,注入到构造器里面去了
追求更松的耦合
一般情况下用在插件式编程,插件指的是不与主体程序一起编译但是能与主体程序一起工作的组件。
好处:以主体为中心,构成一个生态圈。一方面写主体,一方面写插件。
示例:
主体程序:
插件开发:类库
测试:
为了减轻第三方插件开发商的犯错误/减轻成本,开发商主体程序一般会发布sdk去减少第三方的负担。
创建sdk:类库(与主体程序分开),完成后把生成的dll交给第三方。一般放到一个网盘,所有第三方都可以下载
(1)sdk这个类库中,添加IAnimal的接口,第三方都要实现这个接口。避免Voice这个地方出错。
(2)
使用sdk:首先主体程序需要引用这个sdk
然后第三方插件方也要引用这个sdk,进行相应的修改
如果没有开发完 添加一个[Unfinished]
特性作用:就是让你使用反射的时候,通过反射拿到一个方法或者一个类,看它有没有被某一个特性给修饰,然后再去做决定看掉不掉用它,是放弃还是保留。
主体程序修改:
结果: