我怎么知道在运行时扩展我的基类的类?

时间:2014-07-28 16:22:13

标签: c# reflection enums polymorphism extending

运行时 期间,我想使用扩展了我的基类的类填充下拉列表。目前我有一个枚举,这是我用来填充该列表,但我想添加其他类(和其他人正在添加类),并且不希望为此目的维护枚举。我想添加一个新类并且神奇地(可能反射)该类出现在列表中,而没有为下拉列表添加任何附加代码,或者添加任何其他枚举。

class Animal { ... }

enum AllAnimals { Cat, Dog, Pig };
class Cat : Animal {...}
class Dog : Animal {...}
class Pig : Animal {...}

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

使用反射来获取已加载的程序集,然后枚举所有作为基类的子类的类型。

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 { }
}