如何在 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();
}
我有一个
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();
}