/// <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); } } }
static void Main(string[] args) { Console.WriteLine("\t\t1)Работа с делегатами"); double d1 = 1.1, d2 = 2; Console.WriteLine("Числа: " + d1.ToString() + " и " + d2.ToString()); Console.WriteLine("\t1.Вызов метода с разработанным делегатом"); PlusOrMinusMethod("Сумма: ", 1.1, 2, Plus); PlusOrMinus pm1 = Minus;//экземпляр делегата PlusOrMinusMethod("Разность: ", 1.1, 2, pm1); PlusOrMinusMethod("Создание экземпляра делегата на основе лямбда-выражения\n", d1, d2, (x, y) => x + y); Console.WriteLine("\t2.Вызов метода с обобщенным делегатом Func"); PlusOrMinusFunc("Сумма: ", 1.1, 2, Plus); Func <double, double, double> pm2 = Minus;//экземпляр делегата PlusOrMinusFunc("Разность: ", 1.1, 2, pm2); PlusOrMinusMethod("Создание экземпляра делегата на основе лямбда-выражения\n", d1, d2, (x, y) => x + y); Console.WriteLine("\t\t2)Работа с рефлексией"); Console.WriteLine("\t1.Информация о конструкторах, свойствах и методах"); Type t = typeof(ForInspection); Console.WriteLine("Конструкторы:"); foreach (var x in t.GetConstructors()) { Console.WriteLine(x); } Console.WriteLine("Свойства:"); foreach (var x in t.GetProperties()) { Console.WriteLine(x); } Console.WriteLine("Методы:"); foreach (var x in t.GetMethods()) { Console.WriteLine(x); } Console.WriteLine("\t2.Свойства, помеченные атрибутом:"); 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("\t3.Вызов метода класса:"); ForInspection fi = (ForInspection)t.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[] { }); object[] parameters = new object[] { 1.2, 3.5 }; object Result = t.InvokeMember("Plus", BindingFlags.InvokeMethod, null, fi, parameters); Console.WriteLine("Plus(1.2,3.5)={0}", Result); Console.ReadLine(); }