Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Person pers = new Person()
            {
                Name = "Vasya", Age = 21
            };

            Console.WriteLine(pers.Age);
            pers.Age += 5;
            Console.WriteLine(pers.Age);
            dynamic person1 = new Person()
            {
                Name = "Том", Age = 27
            };

            Console.WriteLine(person1);
            Console.WriteLine(person1.getSalary(28.09, "int"));

            dynamic person2 = new Person()
            {
                Name = "Билл", Age = "Двадцать два года"
            };

            Console.WriteLine(person2);
            Console.WriteLine(person2.getSalary(30, "string"));

            dynamic viewbag = new System.Dynamic.ExpandoObject();

            viewbag.Name      = "Tom";
            viewbag.Age       = 21;
            viewbag.Languages = new List <string> {
                "english", "russian"
            };
            Console.WriteLine($"{viewbag.Name} - {viewbag.Age}");
            foreach (var lang in viewbag.Languages)
            {
                Console.WriteLine(lang);
            }

            viewbag.IncrementAge = (Action <int>)(x => viewbag.Age += x);
            viewbag.IncrementAge(6); // увеличиваем возраст на 6 лет
            Console.WriteLine($"{viewbag.Name} - {viewbag.Age}");

            Console.ReadLine();

            dynamic person = new PersonObject();

            person.Name = "Tom";                                                             //Выражение person.Name = "Tom" будет вызывать метод TrySetMember,
                                                                                             //в который в качестве второго параметра будет передаваться строка "Tom".

            person.Age = 23;                                                                 //Выражение return person.Age; вызывает метод TryGetMember.
            Func <int, int> Incr = delegate(int x) { person.Age += x; return(person.Age); }; //Также у объекта person определен метод IncrementAge,

            //который представляет действия анонимного делегата delegate (int x) { person.Age+=x; return person.Age; }.
            //Делегат принимает число x, увеличивает на это число свойство Age и возвращает новое значение person.Age.
            //И при вызове этого метода будет происходить обращение к методу TryInvokeMember.
            //И, таким образом, произойдет приращение значения свойства person.Age.
            person.IncrementAge = Incr;
            Console.WriteLine($"{person.Name} - {person.Age}"); // Tom - 23
            person.IncrementAge(4);
            Console.WriteLine($"{person.Name} - {person.Age}"); // Tom - 27

            // Console.Read();

            Console.WriteLine("введите число");
            int          x      = Int32.Parse(Console.ReadLine());
            ScriptEngine engine = Python.CreateEngine(); //Для создания движка, выполняющего скрипт, применяется класс ScriptEngine.
            ScriptScope  scope  = engine.CreateScope();  //Объект ScriptScope позволяет взаимодействовать со скриптом

            engine.ExecuteFile("D://python//factorial.py", scope);
            dynamic function = scope.GetVariable("factorial");
            // вызываем функцию и получаем результат
            dynamic res = function(x);

            Console.WriteLine(res);
        }