c反射怎么获取程序

时间:2025-01-25 16:59:39 单机游戏

在C中,通过反射获取程序集通常涉及以下几种方法:

使用`Assembly.Load()`、`Assembly.LoadFile()`或`Assembly.LoadFrom()`方法

`Assembly.Load()`:需要提供程序集的名称。

`Assembly.LoadFile()`:需要提供程序集完整的路径。

`Assembly.LoadFrom()`:需要提供程序集名称及其后缀名。

使用`AppDomain.CurrentDomain.GetAssemblies()`方法

该方法可以获取当前应用程序域中所有已加载的程序集,但不会获取引用的未加载的程序集。

使用`Assembly.GetEntryAssembly().GetReferencedAssemblies()`方法

该方法可以获取当前程序集引用的所有程序集,包括已加载和未加载的,但返回的是`AssemblyName`对象集,而不是`Assembly`对象集。

使用`Assembly.LoadFrom(string path)`方法

该方法用于加载指定路径的程序集,适用于加载不同标识的程序集,但不能用于加载标识相同但路径不同的程序集。

示例代码

```csharp

using System;

using System.Collections.Generic;

using System.Reflection;

class Program

{

static void Main()

{

// 加载程序集

Assembly assembly = Assembly.Load("Lys");

// 获取程序集中的所有类型

Type[] types = assembly.GetTypes();

foreach (Type type in types)

{

Console.WriteLine(type.FullName);

}

// 获取指定类型的实例

Type targetType = assembly.GetType("Lys.UIteamanLys");

object instance = Activator.CreateInstance(targetType);

// 获取类型的方法

MethodInfo[] methods = targetType.GetMethods();

foreach (MethodInfo method in methods)

{

Console.WriteLine(method.Name);

}

// 获取类型的属性

PropertyInfo[] properties = targetType.GetProperties();

foreach (PropertyInfo property in properties)

{

Console.WriteLine(property.Name);

}

// 获取类型的字段

FieldInfo[] fields = targetType.GetFields();

foreach (FieldInfo field in fields)

{

Console.WriteLine(field.Name);

}

}

}

```

建议

性能考虑:反射操作通常比直接调用方法或访问属性慢,因此在性能敏感的代码中应谨慎使用。

错误处理:在使用反射时,应确保处理可能出现的异常,例如程序集加载失败或类型查找失败。

类型安全:反射代码可能失去编译时类型检查,因此在使用反射时应注意类型安全。

通过上述方法,你可以有效地使用C反射来获取程序集中的信息和创建对象实例。