System Type public abstract class Type Member Info
Некоторые свойства, определенные в классе System. Type public abstract class Type : Member. Info, IReflect { public abstract Assembly {get; } // сборка, в которой определен // тип public Type. Attributes {get; } // атрибуты, связанные с типом public abstract Type Base. Type {get; } // ссылка на базовый тип public abstract string Full. Name {get; } public bool Is. Serializable {get; } public bool Is. Value. Type {get; } public bool Is. Class {get; } … }
Как получить значение поля? ü Метод класса Field. Info public abstract object Get. Value( object obj ); дает возможность передать ссылку на инициализированный объект типа и получить значение поля. Например, Type tp = typeof(Student); Student stest = new Student(); Field. Info[] flds = tp. Get. Fields(); if (flds. Length == 0) Console. Write. Line("n. No public fields"); else { foreach (Field. Info item in flds) { Console. Write(item. Name); Console. Write(" " + item. Field. Type); Console. Write(" " + item. Is. Private); object s = item. Get. Value(stest); Console. Write(" " + s. To. String()); } }
Вызов метода по ссылке на объект System. Type ü Метод класса Method. Info public object Invoke( object obj, object[] parameters ); дает возможность передать ссылку на инициализированный объект и значения параметров и выполнить метод. Например, Type tp = typeof(Student); Student stest = new Student(); Method. Info[] mds = tp. Get. Methods(); foreach (Method. Info item in mds) { Console. Write(item. Name); if (item. Name == "get_Group") { object[] parms = null; object ret = item. Invoke(stest, parms); Console. Write(" " + ret); } }
Пример определения нового атрибута [Attribute. Usage(Attribute. Targets. Class)] public class My. Comment. Attribute : Attribute { string last_update; string comment; public My. Comment. Attribute(string last_update) { this. last_update = last_update; } public string Comment { get { return comment; } set { comment = value; } } }
Перечисление Attribute. Targets [Serializable. Attribute] [Flags. Attribute] [Com. Visible. Attribute(true)] public enum Attribute. Targets ü Перечисление определяет элементы, с которыми можно связать атрибут. ü Элементы перечисления: All Assembly Class Constructor Delegate Enum Event Field Generic. Parameter Interface Method Module Parameter Property Return. Value Struct ü Значения перечисления можно комбинировать с помощью побитовой операци OR.
Атрибут Conditional. Attribute - пример ü File Class 1. cs Метод F класса Abc определен с атрибутом Conditional. Символ FAbc не определен. using System; using System. Diagnostics; namespace Conditional_Demo { class Class 1 { static void Main(string[] args) { Abc abc = new Abc(); abc. F(); Console. Write. Line (“ 1”); Class 2 cl 2= new Class 2(); cl 2. F 2(); } } class Abc { [Conditional("FAbc")] public void F() {Console. Write. Line("Abc. F"); } }} ü File Class 2. cs. Символ FAbc определен. #define FAbc using System; namespace Conditional_Demo { public class Class 2 { public void F 2() { Abc abc = new Abc(); abc. F(); } }} ü Вывод: 1 Abc. F
- Slides: 19