Assembly(程序集) 反射和缓存
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Winfrom { public partial class Form4 : Form { public Form4() { InitializeComponent(); } private void Form4_Load(object sender, EventArgs e) { Assembly asm = Assembly.Load("Winfrom"); var type = asm.GetType("Winfrom.Test"); var instance = asm.CreateInstance("Winfrom.Test"); type.GetProperty("Name").SetValue(instance, "hello world", null); type.GetProperty("Id").SetValue(instance, 1, null); var method = type.GetMethod("Hello"); method.Invoke(instance, null); } } public class Test { private int id; private string name; public int Id { get { return this.id; } set { this.id = value; } } public string Name { get { return this.name; } set { this.name = value; } } public void Hello() { MessageBox.Show(Name); } } }
protected static List<Tuple<string, object, object>> AssembleyCache = new List<Tuple<string, object, object>>(); object myObj = null; MethodInfo myMethod = null; if (AssembleyCache.Exists(c => c.Item1 == labelMethod)) { myObj = AssembleyCache.First(c => c.Item1 == labelMethod).Item2; myMethod = (MethodInfo)AssembleyCache.First(c => c.Item1 == labelMethod).Item3; } else { Assembly assembly = Assembly.Load("Yanwen.Online.Common.Print"); Type type = assembly.GetType("Yanwen.Online.Common.Print.CreatPdfUtil"); myMethod = type.GetMethod(方法名称); myObj = Activator.CreateInstance(type, null); AssembleyCache.Add(new Tuple<string, object, object>(方法名称, myObj, myMethod)); } if (myObj != null) { object[] parameter = { expressTypeModel }; var result = myMethod.Invoke(myObj, parameter); stream = (MemoryStream)result; }