记一次类型设计的求索历程 (2)

用一个小小的魔法嵌套类,你可以达到这个目的。

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

 作者:阿子
 博客地址:
 本文地址:
 声明:本博客原创文字允许转载,转载时必须保留此段声明,且在文章页面明显位置给出原文链接。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppzjs.html