static void Main(string[] args) { var expressionContainerA = new ExpressionContainer("a", (ConstExpression)3); var expressionContainerB = new ExpressionContainer("b", (ConstExpression)4); var expressionContainerC = new ExpressionContainer("c", (ParametarExpression)"x"); var constExpression1 = new ConstExpression(3); var parametarExpressionX = new ParametarExpression("x"); var binaryExpressionMul = new BinaryExpression(constExpression1, parametarExpressionX, "*", false); var constExpression2 = new ConstExpression(15); var parametarExpressionY = new ParametarExpression("y"); var binaryExpressionDiv = new BinaryExpression(constExpression2, parametarExpressionY, "/", false); var constExpression3 = new ConstExpression(4); var binaryExpressionSub = new BinaryExpression(binaryExpressionDiv, constExpression3, "-", false); var binaryExpressionAdd = new BinaryExpression(binaryExpressionMul, binaryExpressionSub, "+", false); var expressionContainerIme = new ExpressionContainer("ime", binaryExpressionAdd); var binaryExpressionMul2 = new BinaryExpression(binaryExpressionMul, parametarExpressionY, "*", false); var expressionContainerIme2 = new ExpressionContainer("ime", binaryExpressionMul2); List <ExpressionContainer> lista = new List <ExpressionContainer>() { expressionContainerA, expressionContainerB, expressionContainerC }; Thread t1 = new Thread(() => ExpressionSingleton.Instance.ListId(lista).ForEach(t => Console.WriteLine("t1 " + t.ToString()))); Thread t2 = new Thread(() => { ExpressionSingleton.Instance.ChangeName(expressionContainerA, "Novi"); Console.WriteLine("t2 " + expressionContainerA.Name); }); Thread t3 = new Thread(() => { ExpressionSingleton.Instance.ChangeExpression(expressionContainerA, parametarExpressionY); expressionContainerA.Expression.Printf(); }); Thread t4 = new Thread(() => ExpressionSingleton.Instance.ListId(lista).ForEach(t => Console.WriteLine("t4 " + t.ToString()))); t1.Start(); t4.Start(); t2.Start(); t3.Start(); Serialize(expressionContainerIme); Deserialize(); //Console.ReadLine(); }
static void Main(string[] args) { var parametarExpressionX = new ParametarExpression("x"); var parametarExpressionY = new ParametarExpression("y"); var parametarExpressionZ = new ParametarExpression("z"); List <Parametar> lista = new List <Parametar>() { new Parametar("x", 2), new Parametar("y", 4), new Parametar("z", 6) }; List <IExpressionManipulator> list = new List <IExpressionManipulator>(); Assembly assembly = Assembly.GetExecutingAssembly(); List <Type> types = assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IExpressionManipulator))).ToList(); List <MyExpression> lst = new List <MyExpression>() { parametarExpressionX, parametarExpressionY, parametarExpressionZ }; foreach (Type t in types) { if (t == typeof(AverageManipulator)) { ConstructorInfo ctop = typeof(AverageManipulator).GetConstructor(new[] { typeof(List <MyExpression>) }); object instance = ctop.Invoke(new object[] { lst }); list.Add((IExpressionManipulator)instance); } else { IExpressionManipulator instance = (IExpressionManipulator)Activator.CreateInstance(t); instance.Lst.AddRange(lst); list.Add(instance); } } foreach (var obj in list) { Console.WriteLine(obj.Manipulate().Compile()(lista)); } }