日期:2014-05-20 浏览次数:20928 次
/// <summary> /// 工序类 /// </summary> public class Process { public string ProcessNo { get; set; } public string ProcessDesc { get; set; } public CalcMethodInfo GetMethod { get; set; } public CalcMethodInfo SetMethod { get; set; } public float Size { get { return CalcMethodManager.Instance[GetMethod.MethodName].GetSize(); } set { CalcMethodManager.Instance[SetMethod.MethodName].SetSize(value); } } } /// <summary> /// 计算方法信息类 /// </summary> public class CalcMethodInfo { public string MethodName { get; set; } public object[] Args { get; set; } } /// <summary> /// 负责计算方法注册、调用的管理类。 /// 可以考虑用配置文件,部署运行起来方便 /// </summary> public class CalcMethodManager:Dictionary<string, CalcMethodBase> { /// <summary> /// 注册计算方法 /// </summary> /// <param name="calcMethod"></param> public void Register(CalcMethodBase calcMethod) { Add(calcMethod.Name, calcMethod); } public static CalcMethodManager Instance = new CalcMethodManager(); CalcMethodManager() { //可以在此从配置文件读出方法,并登记。也可以程序中手工调用Register方法注册。 } } /// <summary> /// 方法类。 ///可以考虑配置,部署运行起来方便 /// </summary> public abstract class CalcMethodBase { public string Name { get; set; } /// <summary> /// 以下2个方法在子类中必须被重写 /// </summary> /// <returns></returns> public virtual float GetSize() { throw new NotImplementedException(); } public virtual void SetSize(float value) { throw new NotImplementedException(); } } /// <summary> /// 计算方法的一个实例类。 /// 可以将类的Namespace,assembly信息写入配置文件,为了CalcMethodManager可以自动读取 /// </summary> public class CalcMethodM1:CalcMethodBase { public int Size1 { get; set; } public int Size2 { get; set; } public override float GetSize() { //换成需要的算法 return Size1 + Size2; } public override void SetSize(float value) { //换成需要的算法 Size1 = (int)value/2; Size2 = (int)(value - Size1); } }