C#如何获取当前程序类些那些类,并new,运行
时间: 2024-10-06 07:01:44 浏览: 30
在C#中,获取当前程序集中的所有类并尝试实例化它们,可以使用`Assembly`类配合`GetTypes()`方法。不过需要注意的是,不是所有的类都可以直接实例化,例如一些是静态类、结构体、接口等。下面是一个基本的例子,展示了如何做到这一点:
```csharp
using System;
using System.Reflection;
public class MyClass1 { }
public class MyClass2 : MyClass1 { }
public static void GetAndRunClassesInCurrentAssembly()
{
Assembly currentAssembly = Assembly.GetEntryAssembly(); // 获取当前程序集
try
{
List<Type> classesToBeInstantiated = currentAssembly.GetTypes() // 获取所有类
.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface) // 避免接口和抽象类
.ToList();
foreach (Type type in classesToBeInstantiated)
{
if (type.IsSubclassOf(typeof(MyBaseClass))) // 自定义条件,这里假设有一个 MyBaseClass
{
object instance = Activator.CreateInstance(type);
instance.GetType().GetMethod("Run").Invoke(instance, null); // 如果有Run方法,调用它
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error while creating instances: {ex.Message}");
}
}
public abstract class MyBaseClass { public virtual void Run() { Console.WriteLine($"{this.GetType().Name} is running."); } }
阅读全文