这是一段用规则引擎计算加班时间的代码
1
using System;2
using System.Collections;3
using System.ComponentModel;4
using System.Management;5
using System.Threading;6
using System.Runtime.InteropServices;7
using System.IO;8
using System.Xml;9
using System.Text;10
using Muki.Rules;11
using Muki.Util;12

13
namespace Muki.WXF14


{15
public class SniffWindow16

{17

18
static RulesEngine rulesEngine;19
static void Main()20

{21
RulesReader reader = new RulesReader("UID2201A.xml");22
rulesEngine = reader.NewRulesEngine;23
if (rulesEngine!=null)24

{25
Personal oPersonal = new Personal();26
oPersonal.WorkTime=50;27
Variable data = new Variable("this", oPersonal);28
rulesEngine.AddVariable(data);29
30
rulesEngine.RunRule("Calculate");31
Console.WriteLine("Work Time="+oPersonal.WorkTime+" OT="+oPersonal.OT);32

33
oPersonal.WorkTime=59;34
rulesEngine.RunRule("Calculate");35
Console.WriteLine("Work Time="+oPersonal.WorkTime+" OT="+oPersonal.OT);36

37
oPersonal.WorkTime=41;38
rulesEngine.RunRule("Calculate");39
Console.WriteLine("Work Time="+oPersonal.WorkTime+" OT="+oPersonal.OT);40
}41
}42

43
public class Personal : IVariableObject44

{45
private decimal _OT;46
public decimal OT47

{48
get49

{50
return _OT;51
}52
set53

{54
_OT = value;55
}56
}57
private decimal _WorkTime;58
public decimal WorkTime59

{60
get61

{62
return _WorkTime;63
}64
set65

{66
_WorkTime = value;67
}68
}69

70

IVariableObject Members#region IVariableObject Members71

72
public object getObject(string sAttributeName)73

{74
if (sAttributeName.CompareTo("OT") == 0)75

{76
return this.OT;77
}78
else if (sAttributeName.CompareTo("WorkTime") == 0)79

{80
return this.WorkTime;81
}82
else83

{84
return false;85
}86
}87

88
public string getValue()89

{90
return "";91
}92

93
public bool HasA(string sAttribute)94

{95
return true;96
}97

98
public bool IsA(string sName)99

{100
return true;101
}102

103

public string this[string cName]
{104

get
{105
return this.getObject(cName).ToString();106
}107

set
{108
this.setObject(cName,value);109
}110
}111

112
public void setObject(string sAttributeName, object oObject)113

{114
if (sAttributeName.CompareTo("OT") == 0)115

{116
this.OT = XConvert.ToDecimal(oObject);117
}118
else if (sAttributeName.CompareTo("WorkTime") == 0)119

{120
this.WorkTime = XConvert.ToDecimal(oObject);121
}122
}123

124
public void setValue(string sValue)125

{126
;127
}128

129
public Variable.VariableType VarType130

{131

get
{ return Variable.VariableType.OBJECT; }132
}133

134
#endregion135
}136
}137
}138

规则引擎根据工作时间和规则得出加班时间。
/Files/muki/Rule.zip
