编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的。因此,不管多么高大上的目标,实质上都是业务。
所以,我认为不要把写代码上升到科学的高度。上升到艺术就可以了,因为艺术本身也没有高度。。。。
软件设计存在过度设计,语法和框架的理解,也存在过度理解。比如,反编译下,看看反射是怎么实现的。。。
有兴趣是好事,但就算知道了反射的本质,了解了反射是如何设计的,你技术也没什么质的改变。因为,技术水平最终还是要落实到应用上。
在比如,过度的追求代码性能,也不见得是一件好事,因为,[大多数]情况下,硬件比程序员便宜多了。。。(注意这里指的是代码不是算法和数据库性能)
所以,不论什么事,过度了,总不是好事。
----------------------------------------------------------------------------------------------------
本篇文章主要介绍C#反射【用法】。
反射是架构师必会的基础,因为任何一个被设计出来的框架,都要使用反射。
反射也是最隐蔽的语法,因为反射写出来后,通常它会被直接封装,然后调用者就只负责使用,不再关注他的具体实现。
这与它的特性有关,因为反射就是为了减少代码冗余而存在的,所以,看不见很正常。
反射的定义
官方定义:反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
看不懂?没关系,我们把它翻译成人类可理解的语言。
C#编程语言中,最常使用的是类和类中的函数和属性。正向调用的方法是,创建类,然后用类创建一个对象。接下来就可以用这个对象调用类中的方法和属性了。
而反射,就是相对于这种正向调用的存在。即,它是反向调用。
反射可以通过类名的字符串来创建类,可以通过函数名的字符串和属性名的字符串,来调用类下的函数和属性。
有同学会问了, 既然正向可以调用,那么反向调用干什么呢?
会有这种问题的同学,先别着急,继续往下看,反射既然存在,就必然有存在的道理。
反射的基础应用
1,类反射
先看下面代码;代码为通过类名称的字符,反射出类的对象。
public class ReflectionSyntax { public static void Excute() { Type type = GetType("Syntax.Kiba"); Kiba kiba = (Kiba)Activator.CreateInstance(type); Type type2 = GetType2("Syntax.Kiba"); Kiba kiba2 = (Kiba)Activator.CreateInstance(type2); } public static Type GetType(string fullName) { Assembly assembly = Assembly.Load("Syntax"); Type type = assembly.GetType(fullName, true, false); return type; } public static Type GetType2(string fullName) { Type t = Type.GetType(fullName); return t; } } public class Kiba { public void PrintName() { Console.WriteLine("Kiba518"); } }