1.2 反射技术示例
下面是反射技术的示例,我们可以在程序去得时动态实例化对象,获得对象的属性,并调用对象的方法。
下面是反射技术的示例,我们可以在程序去得时动态实例化对象,获得对象的属性,并调用对象的方法。
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
ReflectionDemo
{
public class HelloWorld
{
private string strName = null;
public HelloWorld(string name)
{
strName = name;
}
public HelloWorld()
{
}
public string Name
{
get
{
return strName;
}
}
public void SayHello()
{
if (strName == null)
{
System.Console.WriteLine("Hello World");
}
else
{
System.Console.WriteLine("Hello World,"+strName);
}
}
}
}
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Reflection;
namespace
ReflectionDemo
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("列出程序集中的所有类型");
Assembly a = Assembly.LoadFrom ("ReflectionDemo.exe");
Type[] mytypes = a.GetTypes( );
foreach (Type t in mytypes)
{
System.Console.WriteLine ( t.Name );
}
System.Console.ReadLine ( );
System.Console.WriteLine ("列出HellWord中的所有方法" );
Type ht = typeof(HelloWorld);
MethodInfo[] mif = ht.GetMethods();
foreach(MethodInfo mf in mif)
{
System.Console.WriteLine(mf.Name);
}
System.Console.ReadLine();
System.Console.WriteLine("实例化HelloWorld,并调用SayHello方法");
Object obj = Activator.CreateInstance(ht); //调用无参数构造函数
string[] s = {"zhenlei"};
Object objName = Activator.CreateInstance(ht, s); //调用参数构造函数
//BindingFlags flags = (BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance|BindingFlags.DeclaredOnly);
MethodInfo msayhello = ht.GetMethod("SayHello");
msayhello.Invoke(obj,null);
msayhello.Invoke(objName,null);
System.Console.ReadLine();
}
}
}