在C#中,使用 System.Reflection
命名空间中的 Assembly
类可以加载程序集(Assembly),然后通过反射访问程序集中的类型和成员。静态类是包含静态成员的类,你不能创建静态类的实例,但可以访问其静态成员。
以下是使用 Assembly
加载程序集并访问静态类成员的步骤:
- 获取当前正在执行的程序集或加载一个外部程序集。
- 使用
Assembly.GetType
方法获取静态类的Type
对象。 - 使用
Type
对象访问静态类的静态成员。
using System;
using System.Reflection;
public static class MyStaticClass
{
public static int MyStaticField = 123;
public static string MyStaticProperty { get; } = "Hello, World!";
public static void MyStaticMethod()
{
Console.WriteLine("Static method called.");
}
}
class Program
{
static void Main()
{
// 获取当前正在执行的程序集
Assembly assembly = Assembly.GetExecutingAssembly();
// 使用程序集的FullName获取静态类的Type对象
Type staticClassType = assembly.GetType("MyStaticClass");
if (staticClassType != null)
{
// 访问静态字段
FieldInfo staticField = staticClassType.GetField("MyStaticField");
if (staticField != null)
{
Console.WriteLine(staticField.GetValue(null)); // 输出123
}
// 访问静态属性
PropertyInfo staticProperty = staticClassType.GetProperty("MyStaticProperty");
if (staticProperty != null)
{
Console.WriteLine(staticProperty.GetValue(null)); // 输出Hello, World!
}
// 调用静态方法
MethodInfo staticMethod = staticClassType.GetMethod("MyStaticMethod");
if (staticMethod != null)
{
staticMethod.Invoke(null, null); // 调用静态方法
}
}
}
}
请注意,由于静态类不能被实例化,所以在调用静态方法或访问静态属性和字段时,Invoke
方法的第二个参数是 null
。
加载静态加密方法
Assembly assembly = Assembly.Load("加密工具");
Type[] assemblyType = assembly.GetTypes();
Type type = Array.Find(assemblyType, t => t.Name == GetHelper());
MethodInfo method = type.GetMethod("Encrypt");
rtbConnectString.Text = (string)method.Invoke(null, new object[] { txtConnectString.Text });