`
yaasshole
  • 浏览: 661967 次
文章分类
社区版块
存档分类
最新评论

使用C#进行Reflection编程

 
阅读更多

代码如下:

using System;
using System.Reflection;
using System.Reflection.Emit ;

public class TestReflection {
private String file = @"TestReflection.exe";

static void Main(String[] args) {
TestReflection test = new TestReflection();
test.DisplayModules();
test.DisplayTypes();
test.DisplayMethods();
test.InvokeStaticMethod();
test.InvokeMethod();
}
//显示所有模块名
public void DisplayModules() {
Console.WriteLine("display modules ...");
Assembly assembly = Assembly.LoadFrom(file);
Module[] modules = assembly.GetModules();
foreach( Module module in modules ) {
Console.WriteLine("module name:" + module.Name );
}
}
//显示所有类型名
public void DisplayTypes() {
Console.WriteLine("display types ...");
Assembly assembly = Assembly.LoadFrom(file);
Type[] types = assembly.GetTypes();
foreach( Type type in types ) {
Console.WriteLine("type name:" + type.FullName );
}
}
//先是一个类型中的所有方法名
public void DisplayMethods() {
Console.WriteLine("display methods in TestReflection Type ...");
Assembly assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType("TestReflection");
MethodInfo[] methods = type.GetMethods();
foreach(MethodInfo method in methods) {
Console.WriteLine("method name:" + method.Name);
}
}
//调用一个类中的静态方法
public void InvokeStaticMethod() {
Console.WriteLine("Invoke static method ...");
Assembly assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType("TestSubClass");
type.InvokeMember ("SayHello", BindingFlags.InvokeMethod,null,null,new object[]{});
}
//调用一个类中的非静态方法
public void InvokeMethod() {
Console.WriteLine("Invoke Method ...");
Assembly assembly = Assembly.LoadFrom(file);
Type type = assembly.GetType("TestSubClass");
Object obj = Activator.CreateInstance(type);
TestClass tc = (TestClass)obj ;
type.InvokeMember ("Test1", BindingFlags.InvokeMethod,null,tc,new object[]{});
type.InvokeMember ("Test2", BindingFlags.InvokeMethod,null,tc,new object[]{});
}
}
public interface TestClass {
void Test1();
void Test2();
}
public class TestSubClass : TestClass{
public void Test1() {
Console.WriteLine("This is TestSubClass.Test1");
}
public void Test2() {
Console.WriteLine("This is TestSubClass.Test2");
}
public static void SayHello() {
Console.WriteLine("This is TestSubClass.SayHello");
}
}

编译运行后输出:

display modules ...
module name:TestReflection.exe
display types ...
type name:TestReflection
type name:TestClass
type name:TestSubClass
display methods in TestReflection Type ...
method name:GetHashCode
method name:Equals
method name:ToString
method name:DisplayModules
method name:DisplayTypes
method name:DisplayMethods
method name:InvokeStaticMethod
method name:InvokeMethod
method name:Test2
method name:GetType
Invoke static method ...
This is TestSubClass.SayHello
Invoke Method ...
This is TestSubClass.Test1
This is TestSubClass.Test2

分享到:
评论

相关推荐

    C#4.0编程(第6版)

    中文名: C#4.0编程 (第6版,涵盖Visual Studio 2010以及.NET4) 原名: Programming C# 4.0: Building Windows, Web, and RIA Applications for the .NET 4.0 Framework 作者: Ian Griffiths Matthew Adams Jesse ...

    中美 IT 培训 C# Asp.net 笔记3

    学习反射(Reflection)、属性(Attribute)的相关概念和使用。学习流(stream)的概念和IO操作、文件的读写和传输。 掌握多线程编程、文件的操作和程序集的相关概念,学习反射和属性。 第二阶段教学内容安排(400...

    详解C#编程获取资源文件中图片的方法

    详解C#编程获取资源文件中图片的方法 本文主要介绍C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,以供借鉴参考。具体内容如下: 例子: using System; using System.Collections....

    Essential C# 4.0 (第三版)

    Essential C# 4.0 is a well-organized,“no-fluff” guide to all versions of C# for programmers at all levels of C# experience. This fully updated edition shows how to make the most of C# 4.0’s new ...

    中美 IT 培训 C# Asp.net 笔记2

    学习反射(Reflection)、属性(Attribute)的相关概念和使用。学习流(stream)的概念和IO操作、文件的读写和传输。 掌握多线程编程、文件的操作和程序集的相关概念,学习反射和属性。 第二阶段教学内容安排(400...

    中美 IT 培训 C# Asp.net 全套笔记1

    学习反射(Reflection)、属性(Attribute)的相关概念和使用。学习流(stream)的概念和IO操作、文件的读写和传输。 掌握多线程编程、文件的操作和程序集的相关概念,学习反射和属性。 第二阶段教学内容安排(400...

    DOTNET-C#基础快速入门教程-全网最简单

    DOTNET_C#基础快速入门...反射(Reflection) 属性(Property) 委托(delegate) 事件(event) 集合 泛型 匿名变量 匿名方法 Lambda表达式 闭包(Closure) LINQ技术 多线程 网络编程 窗体设计 Form窗体 MDI窗体 常用控件

    C#编程获取资源文件中图片的方法

    本文实例讲述了C#编程获取资源文件中图片的方法。分享给大家供大家参考。具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; ...

    Albedo:一个.NET库,旨在使用一组通用的抽象和实用程序使Reflection编程更加一致

    一个.NET库,旨在使用一组通用的抽象和实用程序来使反射编程更加一致。 本示例使用从实例读取值: PropertyInfo pi = from v in new Properties () select v . Minor ; var version = new Version ( 2 , 7 ); var...

    CLR via C# 3rd Edition

    然后,研究了CLR异步编程模型、我的AysncEnumerator类、APM和异常、应用程序和线程模型、实现了一个异步服务、APM和Compute-bound操作、APM、I/O请求优先级、将APM转换为Task、基于事件的异步模式、programming ...

    值类型与引用类型理论内容.part01.rar

    C# 高级编程I (40课时) 系统地讲授多线程的基本概念、线程的设计、线程的优先级等以及线程的使用;讲授共享程序集(公有程序集)、私有程序集的组成、原理和使用;学习反射(Reflection)、属性(Attribute...

    值类型与引用类型理论内容.part05.rar

    C# 高级编程I (40课时) 系统地讲授多线程的基本概念、线程的设计、线程的优先级等以及线程的使用;讲授共享程序集(公有程序集)、私有程序集的组成、原理和使用;学习反射(Reflection)、属性(Attribute...

    Beginning Microsoft Visual CSharp 2008 Wiley Publishing(english)

    Reflection 1060 Built-in Attributes 1063 Custom Attributes 1075 Summary 1083 Chapter 31: XML Documentation 1086 Adding XML Documentation 1087 Making Use of XML Documentation 1105 ...

    Spring.net框架

    在 Step1到Step3-Reflection的例子中,我们试图 利用“针对接口编程”以及自己设计的Ioc对系统进行解耦。在Step3到Step5的例子中,我们将利用Spring.net提供的Ioc框架,轻松完 成解耦以及系统改造等工作。 一、类...

    TypeKitchen:TypeKitchen 是一组用于在 .NET Standard 中进行快速元编程的小型库

    但是,不是在可以很好地执行所有这些操作的单个库上进行标准化,而是在NuGet上提供了无数种库,每种库在质量,速度和内存使用方面都采用了不同的方法,具有不同的性能级别。 TypeKitchen 用简洁的 API 替换了这些库...

    CSharp 3.0 With the .NET Framework 3.5 Unleashed(english)

    一本不错的C#书,希望对您有帮助,本书目录: C# 3.0 Unleashed 1 Table of Contents 6 Introduction 30 Why This Book Is for You 31 Organization and Goals 32 Part 1 Learning C# Basics 36 1 Introducing ...

    cpp.core:跨平台、通用类和函数

    core.reflection - 使用元编程允许 C# 像 C++ 类型的反射。 (不是完全自动的,但有一个简单的界面来描述类型) core.container - 易于使用的自定义容器和模板功能 core.dynamic - 在 C++ 中动态对象的实现 core....

    候捷谈Java反射机制

    然而“动态”一词其实没有绝对而普遍适用的严格定义,有时候甚至像对象导向当初被导入编程领域一样,一人一把号,各吹各的调。  一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变...

    二十三种设计模式【PDF版】

    GoF 的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实现得更方便地使用。 GOF 的设计模式是一座"桥" 就 Java 语言体系来说,GOF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一...

Global site tag (gtag.js) - Google Analytics