1、使用反射查询dll的方法
public Form1()
{
InitializeComponent();
Console.WriteLine("------------------Reflect--------------");
//Assembly assembly = Assembly.Load("Microsoft.Office.Interop.Excel"); //加载方式一:dll文件名
//Assembly assembly = Assembly.LoadFile(@"E:\Demo\TestDemo\TestDemo\MyReflection\bin\x86\Debug\netcoreapp2.1.Microsoft.Office.Interop.Excel.dll"); //加载方式二:完整的路径名
Assembly assembly = Assembly.LoadFrom("HDQ1Library.dll"); //加载方式三:dll文件名——可加载文件名也可加载完整路径名
foreach (var type in assembly.GetTypes()) //找到所有类型
{
Console.WriteLine(type.Name);
foreach (var method in type.GetMethods()) //类型下面的所有方法
{
Console.WriteLine("這是" + method.Name + "方法");
}
}
//Console.WriteLine("------------------使用反射創建對象--------------");
//Type type = assembly.GetType("ClassLibrary1.Class1");//需要完整的類型名稱
//object obj = Activator.CreateInstance(type);
Console.ReadKey();
}
2、使用反射创建对象
反射可以创建私有的对象及破坏单例模式。
单例模式:一个对象只能创建一次。
```csharp
public class Class1
{
private Class1()
{
Console.WriteLine("这是一个私有函数");
}
}
//这个功能还用在单例模式里(一个对象只能创建一次),反射可以破坏单例
Console.WriteLine("------------------使用反射創建對象--------------");
Assembly assembly2 = Assembly.LoadFrom("ClassLibrary1.dll");
Type type = assembly2.GetType("ClassLibrary1.Class1");//需要完整的類型名稱
object obj3 = Activator.CreateInstance(type, true); //true即表示可以创建私有类型的函数