关于反射的一点理解(一)
2007-04-05 13:53
330 查看
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。
/*
* Created by SharpDevelop.
* User: anson.wu
* Date: 2007-4-5
* Time: 11:39
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Reflection;
using System.Data;
namespace ReflectionTest
{
class MainClass
{
public static void Main(string[] args)
{
Assembly ass;
Type type;
object obj;
string libPath=@"E:\C#\ReflectLib\bin\Debug\ReflectLib.dll";
if(!System.IO.File.Exists(libPath))
{
Console.Write("The DLL Is Not Exist!");
Console.Read();
return;
}
try
{
ass=Assembly.LoadFrom(libPath);
type=ass.GetType("ReflectLib.TestMethod");
System.Reflection.MethodInfo method=type.GetMethod("GetLibVersion");
obj=ass.CreateInstance("ReflectLib.TestMethod");
//调用GetLibVersion方法
Console.WriteLine(method.Invoke(obj,null));
//调用Add方法
method=type.GetMethod("Add");
object[] par = new object[] {4,5};
Console.WriteLine(method.Invoke(obj,par));
//调用静态方法
method=type.GetMethod("GetWelcome");
Console.WriteLine(method.Invoke(null,null));
}
catch(Exception e)
{
Console.Write(e.Message);
}
}
}
}外部程序集代码
/*
* Created by SharpDevelop.
* User: anson.wu
* Date: 2007-4-5
* Time: 11:36
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ReflectLib
{
/// <summary>
/// Description of MyClass.
/// </summary>
public class TestMethod
{
public string GetLibVersion()
{
return "Current Version 1.0.2";
}
public int Add(int x,int y)
{
return x+y;
}
public static string GetWelcome()
{
return "Hello , C# Reflect!";
}
}
}
/*
* Created by SharpDevelop.
* User: anson.wu
* Date: 2007-4-5
* Time: 11:39
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Reflection;
using System.Data;
namespace ReflectionTest
{
class MainClass
{
public static void Main(string[] args)
{
Assembly ass;
Type type;
object obj;
string libPath=@"E:\C#\ReflectLib\bin\Debug\ReflectLib.dll";
if(!System.IO.File.Exists(libPath))
{
Console.Write("The DLL Is Not Exist!");
Console.Read();
return;
}
try
{
ass=Assembly.LoadFrom(libPath);
type=ass.GetType("ReflectLib.TestMethod");
System.Reflection.MethodInfo method=type.GetMethod("GetLibVersion");
obj=ass.CreateInstance("ReflectLib.TestMethod");
//调用GetLibVersion方法
Console.WriteLine(method.Invoke(obj,null));
//调用Add方法
method=type.GetMethod("Add");
object[] par = new object[] {4,5};
Console.WriteLine(method.Invoke(obj,par));
//调用静态方法
method=type.GetMethod("GetWelcome");
Console.WriteLine(method.Invoke(null,null));
}
catch(Exception e)
{
Console.Write(e.Message);
}
}
}
}外部程序集代码
/*
* Created by SharpDevelop.
* User: anson.wu
* Date: 2007-4-5
* Time: 11:36
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ReflectLib
{
/// <summary>
/// Description of MyClass.
/// </summary>
public class TestMethod
{
public string GetLibVersion()
{
return "Current Version 1.0.2";
}
public int Add(int x,int y)
{
return x+y;
}
public static string GetWelcome()
{
return "Hello , C# Reflect!";
}
}
}
相关文章推荐
- 关于C++中在函数中按值返回、临时对象、拷贝构造函数的一点理解
- 关于C#.Net中事件(event)、委托(delegate)和方法的一点理解
- 关于Asp.net web控件事件处理的一点理解
- 关于进行条件筛选的SQL关键字的一点理解
- 关于java数组的一点理解
- 关于java中的protected一点理解
- 【Android ContentProvider 一】关于ContactsContract.CommonDataKinds.Phone.CONTENT_URI的一点理解
- 关于Action的一点理解
- 关于SpringCloud微服务架构概念的一点理解
- 关于Unicode,ASCII,utf-8编码的一点理解
- 关于多维数组的一点个人的理解(以三维数组为例)
- 关于指针的一点理解
- 关于java反射的一些理解
- 关于Nim博弈的一点小理解----谁才是最强战舰
- 关于响应式布局的一点理解
- 关于YARN Node Labels的一点理解
- 关于AlterDialog的一点理解
- 关于Java的反射机制,你需要理解这些..
- 关于iOS block循环引用的一点理解
- 关于JSF2 composite component一点理解