Exemplo n.º 1
0
        /// <summary>
        /// Работа с атрибутами
        /// </summary>
        static void AttributeInfo()
        {
            Type t = typeof(EXforRef);

            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("\nСвойства, помеченные атрибутом:");
            Console.ResetColor();
            foreach (var x in t.GetProperties())
            {
                object attrObj;
                if (GetPropertyAttribute(x, typeof(NewAttribute), out attrObj))
                {
                    NewAttribute attr = attrObj as NewAttribute;
                    Console.WriteLine(x.Name + " - " + attr.Description);
                }
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            // ДЕЛЕГАТЫ
            int i1 = 1;
            int i2 = 2;

            PlusOrMinusMethod("Плюс: ", i1, i2, Plus);
            PlusOrMinusMethod("Минус: ", i1, i2, Minus);

            //Создание экземпляра делегата на основе метода
            PlusOrMinus pm1 = new PlusOrMinus(Plus);

            PlusOrMinusMethod("Создание экземпляра делегата на основе метода: ", i1, i2, pm1);

            //Создание анонимного метода
            PlusOrMinus pm2 = delegate(int param1, int param2){ return(param1 + param2); };

            PlusOrMinusMethod("Создание экземпляра делегата на основе анонимного метода: ", i1, i2, pm2);
            PlusOrMinusMethod("Создание экземпляра делегата на основе лямбда-выражения: ", i1, i2, (x, y) => x - y);

            //Func<>
            Console.WriteLine("\nИспользование обощенного делегата Func<>");
            PlusOrMinusMethodFunc("Создание экземпляра делегата на основе метода: ", i1, i2, Plus);
            PlusOrMinusMethodFunc("Создание экземпляра делегата на основе лямбдавыражения 3: ", i1, i2, (x, y) => x + y);


            // РЕФЛЕКСИЯ

            Type t = typeof(Class1);

            Console.WriteLine("\nКонструкторы:");
            foreach (var x in t.GetConstructors())
            {
                Console.WriteLine(x);
            }
            Console.WriteLine("\nМетоды:");
            foreach (var x in t.GetMethods())
            {
                Console.WriteLine(x);
            }
            Console.WriteLine("\nСвойства:");
            foreach (var x in t.GetProperties())
            {
                Console.WriteLine(x);
            }
            Console.WriteLine("\nСвойства, помеченные атрибутом:");
            foreach (var x in t.GetProperties())
            {
                object attrObj;
                if (GetPropertyAttribute(x, typeof(NewAttribute), out attrObj))
                {
                    NewAttribute attr = attrObj as NewAttribute;
                    Console.WriteLine(x.Name + " - " + attr.Description);
                }
            }

            //Создание объекта через рефлексию
            Console.WriteLine("\nСвойства, помеченные атрибутом:");
            Class1 fi = (Class1)t.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[] { });

            //Параметры вызова метода
            object[] parameters = new object[] { 1, 2 };
            //Вызов метода
            object Result = t.InvokeMember("Plus", BindingFlags.InvokeMethod, null, fi, parameters);

            Console.WriteLine("Plus(1,2)={0}", Result);

            Console.ReadLine();
        }