反射程序集
27C#之对程序集进行反射
* 方式1
Assembly assembly = Assembly.Load("RFDll");
* 方式2:
Assembly assembly2 = Assembly.LoadFrom("RFDll.dll");
* 方式3:
Assembly assembly3 = Assembly.LoadFile("D:\\RFDll.dll");
程序集是一个或多个类型定义(类、接口、结构等)和资源文件的集合,经过编译后形成一个或多个输出文件(通常是 .dll 或 .exe 文件)。
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 WindowsFormsApp12
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("1.加载程序集");
// 加载程序集
Assembly assembly = Assembly.Load("RFDll");
// 获取程序集中所有对象
Type[] types = assembly.GetTypes();
// 遍历查看
foreach (Type t in types)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("2.加载程序集");
// 加载程序集
Assembly assembly2 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types2 = assembly2.GetTypes();
// 遍历查看
foreach (Type t in types2)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("3.加载程序集单个对象");
// 加载程序集
Assembly assembly3 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type= assembly.GetType("RFDll.Model.Student");
Console.WriteLine(type.FullName);
}
}
}
加载程序集单个对象的方法
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 WindowsFormsApp12
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("1.加载程序集");
// 加载程序集
Assembly assembly = Assembly.Load("RFDll");
// 获取程序集中所有对象
Type[] types = assembly.GetTypes();
// 遍历查看
foreach (Type t in types)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("2.加载程序集");
// 加载程序集
Assembly assembly2 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types2 = assembly2.GetTypes();
// 遍历查看
foreach (Type t in types2)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("3.加载程序集单个对象");
// 加载程序集
Assembly assembly3 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type= assembly.GetType("RFDll.Model.Student");
Console.WriteLine(type.FullName);
Console.WriteLine("4.加载程序集单个对象的方法");
// 加载程序集
Assembly assembly4 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type4 = assembly.GetType("RFDll.Model.Student");
object o = Activator.CreateInstance(type);
MethodInfo mi = type4.GetMethod("show");
mi.Invoke(o, null);
}
}
}
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 WindowsFormsApp12
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("1.加载程序集");
// 加载程序集
Assembly assembly = Assembly.Load("RFDll");
// 获取程序集中所有对象
Type[] types = assembly.GetTypes();
// 遍历查看
foreach (Type t in types)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("2.加载程序集");
// 加载程序集
Assembly assembly2 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types2 = assembly2.GetTypes();
// 遍历查看
foreach (Type t in types2)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("3.加载程序集单个对象");
// 加载程序集
Assembly assembly3 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type= assembly.GetType("RFDll.Model.Student");
Console.WriteLine(type.FullName);
Console.WriteLine("4.加载程序集单个对象的方法");
// 加载程序集
Assembly assembly4 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type4 = assembly.GetType("RFDll.Model.Student");
object o = Activator.CreateInstance(type);
MethodInfo mi = type4.GetMethod("show");
mi.Invoke(o, null);
Console.WriteLine("5.加载程序集所有对象的show方法");
// 加载程序集
Assembly assembly5 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types5 = assembly.GetTypes();
foreach (Type ty in types5)
{
if(ty.IsClass)
{
object o5 = Activator.CreateInstance(ty);
MethodInfo mi2 = ty.GetMethod("show");
if (mi2 != null)
mi2.Invoke(o5, null);
}
}
}
}
}
获取程序集中所有类的字段
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 WindowsFormsApp12
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("1.加载程序集");
// 加载程序集
Assembly assembly = Assembly.Load("RFDll");
// 获取程序集中所有对象
Type[] types = assembly.GetTypes();
// 遍历查看
foreach (Type t in types)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("2.加载程序集");
// 加载程序集
Assembly assembly2 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types2 = assembly2.GetTypes();
// 遍历查看
foreach (Type t in types2)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("3.加载程序集单个对象");
// 加载程序集
Assembly assembly3 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type= assembly.GetType("RFDll.Model.Student");
Console.WriteLine(type.FullName);
Console.WriteLine("4.加载程序集单个对象的方法");
// 加载程序集
Assembly assembly4 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type4 = assembly.GetType("RFDll.Model.Student");
object o = Activator.CreateInstance(type);
MethodInfo mi = type4.GetMethod("show");
mi.Invoke(o, null);
Console.WriteLine("5.加载程序集所有对象的show方法");
// 加载程序集
Assembly assembly5 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types5 = assembly5.GetTypes();
foreach (Type ty in types5)
{
if(ty.IsClass)
{
object o5 = Activator.CreateInstance(ty);
MethodInfo mi2 = ty.GetMethod("show");
if (mi2 != null)
mi2.Invoke(o5, null);
}
}
Console.WriteLine("6.加载程序集所有字段");
// 加载程序集
Assembly assembly6 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types6 = assembly6.GetTypes();
foreach (Type ty in types6)
{
if (ty.IsClass)
{
object o6 = Activator.CreateInstance(ty);
FieldInfo[] fields = ty.GetFields();
foreach (FieldInfo fi in fields)
{
Console.WriteLine($"字段类型:{fi.FieldType}+字段名称:{fi.Name}");
}
}
}
}
}
}
获取私有字段
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 WindowsFormsApp12
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("1.加载程序集");
// 加载程序集
Assembly assembly = Assembly.Load("RFDll");
// 获取程序集中所有对象
Type[] types = assembly.GetTypes();
// 遍历查看
foreach (Type t in types)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("2.加载程序集");
// 加载程序集
Assembly assembly2 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types2 = assembly2.GetTypes();
// 遍历查看
foreach (Type t in types2)
{
Console.WriteLine($"{t.FullName}");
}
Console.WriteLine("3.加载程序集单个对象");
// 加载程序集
Assembly assembly3 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type= assembly.GetType("RFDll.Model.Student");
Console.WriteLine(type.FullName);
Console.WriteLine("4.加载程序集单个对象的方法");
// 加载程序集
Assembly assembly4 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type type4 = assembly.GetType("RFDll.Model.Student");
object o = Activator.CreateInstance(type);
MethodInfo mi = type4.GetMethod("show");
mi.Invoke(o, null);
Console.WriteLine("5.加载程序集所有对象的show方法");
// 加载程序集
Assembly assembly5 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types5 = assembly5.GetTypes();
foreach (Type ty in types5)
{
if(ty.IsClass)
{
object o5 = Activator.CreateInstance(ty);
MethodInfo mi2 = ty.GetMethod("show");
if (mi2 != null)
mi2.Invoke(o5, null);
}
}
Console.WriteLine("6.加载程序集所有字段");
// 加载程序集
Assembly assembly6 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types6 = assembly6.GetTypes();
foreach (Type ty in types6)
{
if (ty.IsClass)
{
object o6 = Activator.CreateInstance(ty);
FieldInfo[] fields = ty.GetFields();
foreach (FieldInfo fi in fields)
{
Console.WriteLine($"字段类型:{fi.FieldType}+字段名称:{fi.Name}");
}
}
}
Console.WriteLine("6.加载程序集所有私有字段");
// 加载程序集
Assembly assembly7 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types7 = assembly7.GetTypes();
foreach (Type ty in types7)
{
if (ty.IsClass)
{
object o6 = Activator.CreateInstance(ty);
FieldInfo[] fields = ty.GetFields(BindingFlags.NonPublic|BindingFlags.Instance);
foreach (FieldInfo fi in fields)
{
Console.WriteLine($"字段类型:{fi.FieldType}+字段名称:{fi.Name}");
}
}
}
}
}
}
8.加载程序集所有属性
Console.WriteLine("8.加载程序集所有属性");
// 加载程序集
Assembly assembly8 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types8 = assembly8.GetTypes();
foreach (Type ty in types8)
{
if (ty.IsClass)
{
PropertyInfo[] propertyInfos = ty.GetProperties();
foreach (PropertyInfo pp in propertyInfos)
{
Console.WriteLine($"字段类型:{pp.PropertyType}+字段名称:{pp.Name}");
}
}
}
加载程序集所有静态方法
Console.WriteLine("9.加载程序集所有静态方法");
// 加载程序集
Assembly assembly9 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types9 = assembly9.GetTypes();
foreach (Type ty in types9)
{
if (ty.IsClass)
{
object o9 = Activator.CreateInstance(ty);
MethodInfo mi9 = ty.GetMethod("show",BindingFlags.Public|BindingFlags.Static);
if (mi9 != null)
mi9.Invoke(o9, null);
}
}
Console.WriteLine("10.加载程序集接口");
// 加载程序集
Assembly assembly10 = Assembly.LoadFrom("RFDll.dll");
// 获取程序集中所有对象
Type[] types10 = assembly10.GetTypes();
foreach (Type ty in types10)
{
if (ty.GetInterface("IStudent")!=null)
{
IStudent i10 = (IStudent)Activator.CreateInstance(ty);
Console.WriteLine($"接口 {i10}");
}
}