110,567
社区成员
发帖
与我相关
我的任务
分享
/* 反射简单示例
* 动态创建类的实例,
* 根据名称创建类的实例,
* 结合多态使用可以轻易实现插件机制
*/
class RuningTimeCreateObjectDemo
{
public static object CreateObject(string sTypeName)
{
Type type = Type.GetType(sTypeName);
object obj = Activator.CreateInstance(type);
return obj;
}
}
/*
* 下面例子中, ChangeValue类的myValue本是私有字段,
* 一般情况下在类外部是不能改它的值的, 但利用反射就能改了
*/
class ChangeValue
{
private string myValue;
public ChangeValue(string str)
{
myValue = str;
}
public void WriteLine()
{
Console.WriteLine("MyValue is: " + myValue);
}
public void PingPong()
{
Console.WriteLine("世乒赛男团必胜!");
}
}
class Test
{
public static void ChangeValue()
{
//通过反射获取并修改字段
ChangeValue cv = new ChangeValue("old value");
cv.WriteLine();
Type t = ((object)cv).GetType();
FieldInfo field = t.GetField("myValue",
BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(cv, "new value");
cv.WriteLine();
//通过反射调用公共方法
MethodInfo method = t.GetMethod("PingPong");
method.Invoke(cv, null);
}
}