C# 反射机制(.NET Refection)

.NET Refection机制是从RTTI+COM机制演化过来的,原RTTI机制内所包含的二进制

字节存在程序中DB块,你可以在PE Explorer反汇编中看到这些量化数据。

.NET Refection机制在C#中应用是异常的广泛,你可以获取所有关于一个类的信息或

测试一个对象的类型 string.Empty is string 相信有些小伙伴想探讨在C++/CLR中我们

如何比较呢,其实办法与RTTI是相等,及 String::Empty::GetType() == String::typeid;

首先我们需要清楚我们为什么使用反射,它可以帮我们减少那些操作,举个小例子。

object obj = new { Name = "张三" }; Type t = obj.GetType(); object name = t.GetProperty("Name").GetValue(obj, null);

有的同学喜欢使用匿名类型 但是如果创建的匿名表达式,后被装箱在object中

怎么提取它的值呢,既然是匿名类型肯定不会让我们可以按照常规的办法想取值就取

值那么我们这个时候就需要涉及到反射。

var obj = new { Name = "张三" };Type t = obj.GetType();foreach (FieldInfo f in t.GetFields()){if (f.GetValue(obj).Equals(obj.Name))f.SetValue(obj, "李四");}string name = obj.Name;我们知道匿名表达式创建的类型是隐藏的,而它给予的属于是只读,意味着我们只可

在第一次创建时进行赋值,,如果我们需要赋值,那么我们肯定需要绕过编译器的语言

检查有什么好的办法吗,反射。

static void Main(string[] args){Assembly assmbly = Assembly.LoadWithPartialName("System.Windows.Forms");object newform = Activator.CreateInstance(assmbly.GetType("System.Windows.Forms.Form")); // frmnewform.GetType().InvokeMember("Show", BindingFlags.InvokeMethod, null, newform, null);Console.ReadKey(false);}动态加载一个 System.Windows.Forms程序集,然后获取System.Windows.Forms.Form的

类型并通过 Activator.CreateInstance 动态创建一个实例对象,其后通过反射机制动态调用

其中的 Show 方法,所以在你运行该代码时会见弹出一个空白窗口。 class A { public string Name { get; set; } } class B { public string Name { get; set; } } static void Main(string[] args) { A a = new A(); B b = new B(); a.Name = "你总是遥望着天"; foreach (PropertyInfo x in typeof(A).GetProperties()) { PropertyInfo y = typeof(B).GetProperty(x.Name); y.SetValue(b, x.GetValue(a, null), null); } }

有时候我们无法使用序列化的方式,我们该如何复制一个类呢?

善于利用反射会减轻我们的操作,你可以仔细研究上面的代码。

在.NET中反射是一个非常重要的东西,反射可以完成事物远比

上面的列出的还要多的多,具体就要看开发者自己如何进行抉择

既有美妙的风景,也会有称不上景、只有风的地方。

C# 反射机制(.NET Refection)

相关文章:

你感兴趣的文章:

标签云: