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(项目名称);
}
}
类动物{}
列举所有动物{猫、狗、猪};
类别猫:动物{}
狗类:动物{}
猪类:动物{}
}

请不要只要求我们为您解决问题。向我们展示你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“”,以获取您真正需要阅读的优秀文章。是的,有一种方法可以实现这一点。请使用谷歌,自己尝试一下。然后,如果它不起作用,请返回您的代码和收到的错误消息,我们将尝试提供帮助。派生类是否都保证位于同一个程序集中?可能重复+为什么要再次加载程序集?已经加载了。这还假设所有子类都在同一个程序集中。