如何在 C# 中将 class 与枚举相关联

How to assosiate class with enum in C#

我有一个 FirstClass:baseClass<Entity1>; SecondClass:baseClass<Entity2> ... baseClass 的构造函数采用枚举 Entity,它应该对应于 TEntity。现在我自己写枚举。如何让 baseClass 由 TEntity 自动定义 enumEntity。可能使用 Dictionary.

我的理解是您想定义不同的 enums,然后让 class 继承自基础 class,根据subclass类型,这里是FirstClass(使用Enum1)和SecondClass(使用Enum2)。

以下是实现此目标的方法。枚举在底部定义,如果您愿意,可以将它们称为 Entity1 和 Entity2。当创建子classes 时,每个都将继承正确的枚举。

构造函数中的 foreach 循环用于演示目的,只是为了表明使用了正确的枚举。

// Base class has an enum (can be any enum)
public class BaseClass<T> where T: Enum
{
    public T baseClassEnum;
}

// FirstClass will inherit BaseClass enum which is here constrained to Enum1
public class FirstClass : BaseClass<Enum1>
{
    public FirstClass()
    {
        foreach (var e in Enum.GetValues(baseClassEnum.GetType()))
        {
            Console.WriteLine(e);
        }
    }
}

// Same for SecondClass, but constrained to Enum2
public class SecondClass : BaseClass<Enum2> // This class will use Enum2
{
    public SecondClass()
    {
        foreach (var e in Enum.GetValues(baseClassEnum.GetType()))
        {
            Console.WriteLine(e);
        }
    }
}

// Enum1 and Enum2 definitions:
public enum Enum1
{
    a,
    b
}

public enum Enum2
{
    c,
    d
}

public static void Main()
{
    // Usage; note you do not specify which enum each class will have,
    // as this is defined in the where contraints above:
    var first  = new FirstClass();  // Prints a, b as this class' enum is Enum1
    var second = new SecondClass(); // Prints c, d as this class' enum is Enum2

    Console.ReadKey();
}