C# 如何知道在运行时扩展基类的类?
在运行时期间,我想用扩展了基类的类填充一个下拉列表。目前我有一个枚举,这是我用来填充该列表的,但我想添加其他类(其他人正在添加类),不想为此维护枚举。我想添加一个新类,该类神奇地(可能是反射)出现在列表中,没有为下拉列表编写任何附加代码,也没有添加任何附加枚举C# 如何知道在运行时扩展基类的类?,c#,reflection,enums,polymorphism,extending,C#,Reflection,Enums,Polymorphism,Extending,在运行时期间,我想用扩展了基类的类填充一个下拉列表。目前我有一个枚举,这是我用来填充该列表的,但我想添加其他类(其他人正在添加类),不想为此维护枚举。我想添加一个新类,该类神奇地(可能是反射)出现在列表中,没有为下拉列表编写任何附加代码,也没有添加任何附加枚举 class Animal { ... } enum AllAnimals { Cat, Dog, Pig }; class Cat : Animal {...} class Dog : Animal {...} class Pig :
class Animal { ... }
enum AllAnimals { Cat, Dog, Pig };
class Cat : Animal {...}
class Dog : Animal {...}
class Pig : Animal {...}
有没有办法做到这一点?使用反射获取加载的程序集,然后枚举基类的所有子类类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var types = new List<Type>();
foreach (var assembly in assemblies)
types.AddRange(assembly.GetTypes().Where(x => x.IsSubclassOf(typeof(Animal))));
foreach (var item in types)
Console.WriteLine(item.Name);
}
}
class Animal { }
enum AllAnimals { Cat, Dog, Pig };
class Cat : Animal { }
class Dog : Animal { }
class Pig : Animal { }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
运用系统反思;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
var assemblies=AppDomain.CurrentDomain.GetAssemblies();
变量类型=新列表();
foreach(程序集中的变量程序集)
types.AddRange(assembly.GetTypes()。其中(x=>x.IsSubclassOf(typeof(Animal)));
foreach(类型中的var项)
Console.WriteLine(项目名称);
}
}
类动物{}
列举所有动物{猫、狗、猪};
类别猫:动物{}
狗类:动物{}
猪类:动物{}
}
请不要只要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。是的,有一种方法可以实现这一点。请使用谷歌,自己尝试一下。然后,如果它不起作用,请返回您的代码和收到的错误消息,我们将尝试提供帮助。派生类是否都保证位于同一个程序集中?可能重复+为什么要再次加载程序集?已经加载了。这还假设所有子类都在同一个程序集中。