为什么大家都认为 Enums 不能抽象呢?
System.Enum 类是枚举的抽象。
您可以将任何枚举值分配给 Enum,并且可以将其转换回原始枚举或使用名称或值。
例如:
这段代码来自我的一个控件库中使用的动态属性集合。我允许通过枚举值创建和访问属性,以使其速度稍快一些,并减少人为错误
/// <summary>
/// creates a new trigger property.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <param name="name"></param>
/// <returns></returns>
protected virtual TriggerProperty<T> Create<T>(T value, Enum name)
{
var pt = new TriggerProperty<T>(value, OnPropertyChanged, Enum.GetName(name.GetType(), name));
_properties[name.GetHashCode()] = pt;
return pt;
}
我Enum.GetName(Type, object)
用来获取枚举值的名称(为属性提供名称),出于速度和一致性的原因,我GetHashCode()
用来返回枚举成员的整数值(int 的哈希码始终只是 int 值)
这是被调用的方法的示例:
public enum Props
{
A, B, C, Color, Type, Region, Centre, Angle
}
public SpecularProperties()
:base("SpecularProperties", null)
{
Create<double>(1, Props.A);
Create<double>(1, Props.B);
Create<double>(1, Props.C);
Create<Color>(Color.Gray, Props.Color);
Create<GradientType>(GradientType.Linear, Props.Type);
Create<RectangleF>(RectangleF.Empty, Props.Region);
Create<PointF>(PointF.Empty, Props.Centre);
Create<float>(0f, Props.Angle);
}