.NET下的反射
来源:互联网 发布:淘宝助理手机版怎么用 编辑:程序博客网 时间:2024/04/28 05:53
做一程序,老大说以后功能升级要用到程序集。于是学习使用反射和程序集,对其中一些心存疑惑。看了一些书和例子,小有感悟,小写与此,以备忘
先是参看了《C#精髓》上相关章节的内容,类型迟绑定的例子:(控制台程序实例)
1.建立一个类库,命名Greeting,编译为Greeting.dll
using System;
using System.Collections.Generic;
using System.Text;
namespace Greeting
{
public abstract class Class1
{
public abstract void SayHello();
}
}
2.建立类库English,引用Greeting.dll,继承Greeting里的类,重载Greeting内的虚方法;
using System;
using System.Collections.Generic;
using System.Text;
namespace English
{
public class AmericanGreeting : Greeting.Class1
{
private string msg = "Hey, dude, Wassup !";
public override void SayHello()
{
Console.WriteLine(msg);
}
}
public class BritishGreeting : Greeting.Class1
{
private string msg = "Good morning , old chap !";
public override void SayHello()
{
Console.WriteLine(msg);
}
}
}
3.主程序
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace 反射实验
{
class Program
{
static void Main(string[] args)
{
foreach (string s in args)
{
Assembly a = Assembly.LoadFrom(s);
foreach (Type t in a.GetTypes())
if (t.IsSubclassOf(typeof(Greeting.Class1)))
{
object o = Activator.CreateInstance(t);
MethodInfo mi = t.GetMethod("SayHello");
mi.Invoke(o,null);
}
}
}
}
}
这样,即使程序已经发布,如果需要增加某个功能,不需要改动程序,新建一个类库比如Test,继承Greeting的类,在其内部实现需要的方法,在主程序(这里控制台运行时是靠参数传入的)运行时后跟该dll即可,当然,如果是实现了多个方法,需要在主程序代码处
MethodInfo mi = t.GetMethod("SayHello");
将"SayHello"方法改为新的方法名,这里也可以用编程的方法动态获得,以便增加灵活性
编译,运行,需要将English.dll拷贝到主程序目录下(或者运行时指定完整路径),比如本主程序编译后为 程序集.exe,则在控制台下运行:
程序集.exe English.dll
输出结果:Hey, dude, Wassup !
Good morning , old chap !
《C#精髓》内的原话:“这个例子有一点很有趣,它是完全的迟绑定,也就是说,在SayHello程序发布以后很长时间,你还可以创建一个新类型,让SayHello自动地使用它,只需在命令行中指定。这是通过反射的迟绑定的关键优点之一。”
- .NET下的反射
- 关于.NET框架下的反射机制
- .net下的反射操作类
- .net下的反射操作类
- .net反射的问题。
- 关于.NET的反射
- .NET的反射工厂
- .net的反射机制
- .Net的反射机制
- .net的反射机制
- .net 反射的奥妙
- .net反射的研究
- ASP.NET的反射
- VB.net 的反射疑惑
- .NET反射的简单示例
- .NET反射的简单示例
- .NET反射的简单示例
- NET反射的简单示例
- native2ascii说明
- 孙鑫《vc ++深入详解》第三章mfc框架程序剖析
- hibernate的查询死锁
- 使用 JavaScript 创建和分析 JSON 消息
- Writing Solaris Device Driver: Basic
- .NET下的反射
- 男生想跟女生说的30句真心话!!!!
- asp.net打印
- 如何架设Ubuntu Linux打印服务器
- Microsoft .NET Pet Shop 4 架构与技术分析
- MFC教程(9)-- MFC的进程和线程(2)
- C#调用存储过程返回值
- 吃出健康女生
- 谁会DIV+CSS啊?