用一个小小的魔法嵌套类,你可以达到这个目的。
public abstract class EngineType { public static EngineType V8 = new V8EngineType(); public static EngineType Diesel = new DieselEngineType(); private EngineType() { } public abstract int Price { get; } public abstract int HorsePower { get; } public class V8EngineType : EngineType { public override int HorsePower { get { return 200; } } public override int Price { get { return 20000; } } } public class DieselEngineType : EngineType { public override int HorsePower { get { return 80; } } public override int Price { get { return 5000; } } } }或者是这样:
public class EngineType { public static EngineType V8 = new EngineType(20000, 200); public static EngineType Diesel = new EngineType(5000, 80); private EngineType(int price, int horsePower) { Price = price; HorsePower = horsePower; } public int Price { get; private set; } public int HorsePower { get; private set; } }构造函数应该是私有的,这样这个类中的任何人都不能创建一个新的EngineType。
如此一来,我的类型设计问题得到了有效的解决。
其实还有一个技巧,就是我们可以使用带有属性的常规枚举,例如:
public enum EngineType { [EngineAttr(80, 5000)] Boxer, [EngineAttr(100, 10000)] Straight, [EngineAttr(200, 20000)] V8 }通过扩展方法,我们也可以访问这个枚举类的属性值。
程序代码:https://github.com/daivven/TypeDesign
作者:阿子
博客地址:
本文地址:
声明:本博客原创文字允许转载,转载时必须保留此段声明,且在文章页面明显位置给出原文链接。