public override void Verify() { base.Verify(); Debug.Assert(NewAttribute.GetInVersion(OldVersion) == null && NewAttribute.GetInVersion(NewVersion) == NewAttribute); Debug.Assert(HasAttributes.PSMAttributes.Contains(NewAttribute)); Debug.Assert((HasAttributes.IsFirstVersion && HasAttributesOldVersion == null) || !HasAttributesOldVersion.PSMAttributes.Contains(NewAttribute)); Debug.Assert(NewAttribute.Version == NewVersion); }
static void Main(string[] args) { Person.Person obj = new Person.Person(); Type t = obj.GetType(); Console.WriteLine("\nИнформация о типе:"); Console.WriteLine("Тип " + t.FullName + " унаследован от " + t.BaseType.FullName); Console.WriteLine("Пространство имен " + t.Namespace); Console.WriteLine("Находится в сборке " + t.AssemblyQualifiedName); 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Поля данных (public):"); foreach (var x in t.GetFields()) { Console.WriteLine(x); } Type t2 = typeof(Person.Person); Console.WriteLine("\nВызов метода:"); Person.Person Lera = (Person.Person)t.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[] { }); object[] parameters = new object[] { 5, 5 }; object Result = t.InvokeMember("Study", BindingFlags.InvokeMethod, null, Lera, parameters); Console.WriteLine("Успеваемость: {0}", Result); Console.WriteLine("\nPerson реализует IComparable -> " + t.GetInterfaces().Contains(typeof(IComparable))); Type a = typeof(Person.Person); Console.WriteLine("\nСвойства, помеченные атрибутом:"); foreach (var x in a.GetProperties()) { object at; if (GetPropertyAttribute(x, typeof(NewAttribute), out at)) { NewAttribute attr = at as NewAttribute; Console.WriteLine(x.Name + " - " + attr.abc); } } Console.ReadKey(); }
static void Main(string[] args) { Rectangle obj = new Rectangle(3.1, 3.2); Type t = obj.GetType(); 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); } //содержат ли свойства атрибут NewAttribute Type t1 = typeof(Rectangle); Console.WriteLine("\nСвойства, помеченные атрибутом:"); foreach (var x in t1.GetProperties()) { object attrObj; if (GetPropertyAttribute(x, typeof(NewAttribute), out attrObj)) { NewAttribute attr = attrObj as NewAttribute;// Для приведения полученного значения типа object к требуемому типу NewAttribute Console.WriteLine(x.Name + " - " + attr.Description); } } //вызов метода с использованием рефлексии Type t2 = typeof(Rectangle); Console.WriteLine("\nВызов метода:"); //Создание объекта //ForInspection fi = new ForInspection(); //Можно создать объект через рефлексию Rectangle fi = (Rectangle)t.InvokeMember(null, BindingFlags.CreateInstance, null, null, new object[] { }); //Параметры вызова метода object[] parameters = new object[] { 3.1, 3 }; //Вызов метода object Result = t2.InvokeMember("Area1", BindingFlags.InvokeMethod, null, fi, parameters); Console.WriteLine("Area1 (3.1 ,3)={0}", Result); // Метод InvokeMember принимает различные }
/// Работа с атрибутами static void AttributeInfo() { Type t = typeof(Car); 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); } } }