C#反射的赋值和调用-invoke

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.net 通过反射, 泛型和Invoke 实现实体类自动填充

using System;

using System.Reflection;

namespace ConsoleApplication9

{

class Love

{

public int field1;

private string _name;

public Love()

{

}

public string Name

{

get

{

return _name;

}

set

{

_name = value;

}

}

public int GetInt(int a)

{

return a;

}

public void Display(string str)

{

Console.WriteLine(str);

}

}

class Class1

{

[STAThread]

static void Main(string[] args)

{

Love love = new Love();

Type type = love.GetType();

Object obj = type.InvokeMember(null,

BindingFlags.DeclaredOnly |

BindingFlags.Public | BindingFlags.NonPublic |

BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);

//调用没有返回值的方法

type.InvokeMember("Display", BindingFlags.InvokeMethod | BindingFlags.Public | Binding Flags.Instance, null, obj, new object[] { "aldfjdlf" });

//调用有返回值的方法

int i = (int)type.InvokeMember("GetInt", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, new object[] { 1 });

Console.WriteLine(i);

//设置属性值

type.InvokeMember("Name", BindingFlags.SetProperty, null, obj, new string[] { "abc" });

//获取属性值

string str = (string)type.InvokeMember("Name", BindingFlags.GetProperty, null, obj, null);

Console.WriteLine(str);

//设置字段值

type.InvokeMember("field1", BindingFlags.SetField, null, obj, new object[] { 444 });

//获取字段值

int f = (int)type.InvokeMember("field1", BindingFlags.GetField, null, obj, null);

Console.WriteLine(f);

Console.ReadLine();

}

}

}

相关文档
最新文档