🗊 Презентация Рефлексия типов и программирование с использованием атрибутов

Нажмите для полного просмотра!
Рефлексия типов и программирование с использованием атрибутов, слайд №1 Рефлексия типов и программирование с использованием атрибутов, слайд №2 Рефлексия типов и программирование с использованием атрибутов, слайд №3 Рефлексия типов и программирование с использованием атрибутов, слайд №4 Рефлексия типов и программирование с использованием атрибутов, слайд №5 Рефлексия типов и программирование с использованием атрибутов, слайд №6 Рефлексия типов и программирование с использованием атрибутов, слайд №7 Рефлексия типов и программирование с использованием атрибутов, слайд №8 Рефлексия типов и программирование с использованием атрибутов, слайд №9 Рефлексия типов и программирование с использованием атрибутов, слайд №10 Рефлексия типов и программирование с использованием атрибутов, слайд №11 Рефлексия типов и программирование с использованием атрибутов, слайд №12 Рефлексия типов и программирование с использованием атрибутов, слайд №13 Рефлексия типов и программирование с использованием атрибутов, слайд №14 Рефлексия типов и программирование с использованием атрибутов, слайд №15 Рефлексия типов и программирование с использованием атрибутов, слайд №16 Рефлексия типов и программирование с использованием атрибутов, слайд №17 Рефлексия типов и программирование с использованием атрибутов, слайд №18 Рефлексия типов и программирование с использованием атрибутов, слайд №19 Рефлексия типов и программирование с использованием атрибутов, слайд №20 Рефлексия типов и программирование с использованием атрибутов, слайд №21 Рефлексия типов и программирование с использованием атрибутов, слайд №22 Рефлексия типов и программирование с использованием атрибутов, слайд №23 Рефлексия типов и программирование с использованием атрибутов, слайд №24 Рефлексия типов и программирование с использованием атрибутов, слайд №25 Рефлексия типов и программирование с использованием атрибутов, слайд №26 Рефлексия типов и программирование с использованием атрибутов, слайд №27 Рефлексия типов и программирование с использованием атрибутов, слайд №28

Содержание

Вы можете ознакомиться и скачать презентацию на тему Рефлексия типов и программирование с использованием атрибутов. Доклад-сообщение содержит 28 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Язык С# Рефлексия типов и программирование с использованием атрибутов Лекция #6
Описание слайда:
Язык С# Рефлексия типов и программирование с использованием атрибутов Лекция #6

Слайд 2


Что такое рефлексия типов В .NET рефлексия типов – это процесс обнаружения типов во время работы программы Класс Type из System Пространство имен...
Описание слайда:
Что такое рефлексия типов В .NET рефлексия типов – это процесс обнаружения типов во время работы программы Класс Type из System Пространство имен System.Reflection

Слайд 3


Члены класса Type
Описание слайда:
Члены класса Type

Слайд 4


Получение объекта класса Type Foo theFoo = new Foo(); Type t = theFoo.GetType(); Type t = null; t = Type.GetType("Foo"); Type t =...
Описание слайда:
Получение объекта класса Type Foo theFoo = new Foo(); Type t = theFoo.GetType(); Type t = null; t = Type.GetType("Foo"); Type t = typeof(Foo)

Слайд 5


Тестовый класс Foo // Мы сможем получить разнообразную информацию об этом классе во время выполнения namespace TheType { // Два интерфейса public...
Описание слайда:
Тестовый класс Foo // Мы сможем получить разнообразную информацию об этом классе во время выполнения namespace TheType { // Два интерфейса public interface IFaceOne { void MethodA(); } public interface IFaceTwo { void MethodB(); } public class Foo: IFaceOne, IFaceTwo // Класс Foo поддерживает эти два интерфейса { public int myIntField; // Поля public string myStringField; public void myMethod(int p1, string p2) {...} // Метод public int MyProp // Свойство { get { return myIntField; } set { myIntField = value; } } // Методы интерфейсов IFaceOne и IFaceTwo public void MethodA() {...} public void MethodB() {...} } }

Слайд 6


Получаем информацию о полях и методах public static void ListMethods (Foo f) { Console.WriteLine("***** Methods of Foo *****"); Type t =...
Описание слайда:
Получаем информацию о полях и методах public static void ListMethods (Foo f) { Console.WriteLine("***** Methods of Foo *****"); Type t = f.GetType(); MethodInfo[] mi = t.GetMethods(); foreach(MethodInfo m in mi) Console.WriteLine("Method: {0}", m.Name); Console.WriteLine("*************************\n"); } public static void ListFields(Foo f) { Console.WriteLine("***** Fields of Foo *****"); Type t = f.GetType(); FieldInfo[] fi = t.GetFields(); foreach(FieldInfo field in fi) Console.WriteLine("Field: {0}", field.Name); Console.WriteLine("*************************\n"); }

Слайд 7


Выводим разную информацию о классе // Выводим разную информацию о Foo public static void ListVariosStats(Foo f) { Console.WriteLine("*****...
Описание слайда:
Выводим разную информацию о классе // Выводим разную информацию о Foo public static void ListVariosStats(Foo f) { Console.WriteLine("***** Various stats about Foo *****"); Type t = f.GetType(); Console.WriteLine("Full name is: {0}", t.FullName); Console.WriteLine("Base is: {0}", t.BaseType); Console.WriteLine("Is it abstract? {0}", t.IsAbstract); Console.WriteLine("Is it a COM object? {0}", t.IsCOMObject); Console.WriteLine("Is it sealed? {0}", t.IsSealed); Console.WriteLine("Is it a class? {0}", t.IsClass); Console.WriteLine("**************************\n"); }

Слайд 8


Выводим список свойств // Выводим список всех свойств public static void ListPorps(Foo f) { Console.WriteLine("***** Properties of Foo...
Описание слайда:
Выводим список свойств // Выводим список всех свойств public static void ListPorps(Foo f) { Console.WriteLine("***** Properties of Foo *****"); Type t = f.GetType(); PropertyInfo[] pi = t.GetProperties(); foreach(PropertyInfo prop in pi) Console.WriteLine("Prop: {0}", prop.Name); Console.WriteLine("**************************\n"); }

Слайд 9


Выводим список интерфейсов // Выводим список всех интерфейсов, поддерживаемых Foo public static void ListInterfaces(Foo f) {...
Описание слайда:
Выводим список интерфейсов // Выводим список всех интерфейсов, поддерживаемых Foo public static void ListInterfaces(Foo f) { Console.WriteLine("***** Interfaces of Foo *****"); Type t = f.GetType(); Type[] ifaces = t.GetInterfaces(); foreach(Type i in ifaces) Console.WriteLine("Interface: {0}", i.Name); Console.WriteLine("**************************\n"); }

Слайд 10


Типы пространства имен System.Reflection
Описание слайда:
Типы пространства имен System.Reflection

Слайд 11


Загрузка сборки namespace CarReflector // Получаем информацию о сборке CarLibrary { using System; using System.Reflection; using System.IO; // Нужно...
Описание слайда:
Загрузка сборки namespace CarReflector // Получаем информацию о сборке CarLibrary { using System; using System.Reflection; using System.IO; // Нужно для использования FileNotFoundException public class CarReflector { public static int Main(string[] args) { // Используем метод Assembly.Load() для загрузки сборки Assembly a = null; try { a=Assembly.Load("CarLibrary"); } catch (FileNotFoundException e) {Console.WriteLine(e.Message);} return 0; } } }

Слайд 12


Вывод информации о типах в сборке public class CarReflector { public static int Main(string[] args) { Assembly a = null; try {...
Описание слайда:
Вывод информации о типах в сборке public class CarReflector { public static int Main(string[] args) { Assembly a = null; try { a=Assembly.Load("CarLibrary"); } catch(FileNotFoundException e) {Console.WriteLine(e.Message);} ListAllTypes(a); return 0; } // Выводим информацию о всех типах в сборке private static void ListllTypes(Assembly a) { Console.WriteLine("Listing all types in {0}", a.FullName); Type[] types = a.GetTypes(); foreach(Type t in types) Console.WriteLine("Type: {0}", t); } }

Слайд 13


Вывод информации о членах класса private static void ListAllMembers(Assembly a) { Type miniVan = a.GetType("CarLibrary.MiniVan");...
Описание слайда:
Вывод информации о членах класса private static void ListAllMembers(Assembly a) { Type miniVan = a.GetType("CarLibrary.MiniVan"); Console.WriteLine("Listing all members for {0}", miniVan); MemberInfo[] mi = miniVan.GetMembers(); foreach(MemberInfo m in mi) Console.WriteLine("Type {0}: {1} ", m.MemberType.ToString(), m); }

Слайд 14


Вывод информации о параметрах метода private static void GetParams(Assembly a) { Type miniVan = a.GetType("CarLibrary.MiniVan"); MethodInfo...
Описание слайда:
Вывод информации о параметрах метода private static void GetParams(Assembly a) { Type miniVan = a.GetType("CarLibrary.MiniVan"); MethodInfo mi = miniVan.GetMethod("TurnOnRadio"); Console.WriteLine("Here are the params for {0}", mi.Name); // Show number of params. ParameterInfo[] myParams = mi.GetParameters(); Console.WriteLine("Method has {0} params", myParams.Length); // Show info about param. foreach(ParameterInfo pi in myParams) { Console.WriteLine("Param name: {0}", pi.Name); Console.WriteLine("Position in method: {0}", pi.Position); Console.WriteLine("Param type: {0}", pi.ParameterType); } }

Слайд 15


Позднее связывание и класс System.Activator // Создаем объект выбранного нами типа "на лету" public class LateBind { public static int...
Описание слайда:
Позднее связывание и класс System.Activator // Создаем объект выбранного нами типа "на лету" public class LateBind { public static int Main(string[] args) { // Используем класс Assembly для загрузки сборки Assembly a = null; try { a = Assembly.Load("CarLibrary"); } catch(FileNotFoundException e) {Console.WriteLine(e.Message);} // Получаем объект Type для класса MiniVan Type miniVan = a.GetType("CarLibrary.MiniVan"); // Создаем объект класса MiniVan "на лету" object obj = Activator.CreateInstance(miniVan); } }

Слайд 16


Использование позднего связывания public static int Main(string[] args) { // Загружаем CarLibrary при помощи класса Assembly ... // Получаем объект...
Описание слайда:
Использование позднего связывания public static int Main(string[] args) { // Загружаем CarLibrary при помощи класса Assembly ... // Получаем объект типа Type Type miniVan = a.GetType("CarLibrary.MiniVan"); // Создаем объект класса MiniVan "на лету" object obj = Activator.CreateInstance(miniVan); // Получаем объект класса MethodInfo для метода TurboBoost() MethodInfo mi = miniVan.GetMethod("TurboBoost"); // Вызываем метод (передаем null вместо параметров) mi.invoke(obj, null); return 0; }

Слайд 17


Вызов метода с параметрами object[] paramArray = new object[2]; paramArray[0]="Fred"; paramArray[1]= 4; MethodInfo mi =...
Описание слайда:
Вызов метода с параметрами object[] paramArray = new object[2]; paramArray[0]="Fred"; paramArray[1]= 4; MethodInfo mi = miniVan.GetMethod("TellChildToBeQuiet"); // Вызываем метод mi.invoke(obj, paramArray);

Слайд 18


Динамические сборки Динамические сборки создаются «на лету» Ее можно сохранить на диск Пространство имен System.Reflection.Emit Класс AssemblyBuilder...
Описание слайда:
Динамические сборки Динамические сборки создаются «на лету» Ее можно сохранить на диск Пространство имен System.Reflection.Emit Класс AssemblyBuilder Создание кода IL «на лету» в процессе выполнения программы

Слайд 19


Атрибуты в .NET Атрибуты – это аннотации, который могут быть применены к типу (интерфейсу, структуре и т.п.), члену класса (полю, свойству, методу)...
Описание слайда:
Атрибуты в .NET Атрибуты – это аннотации, который могут быть применены к типу (интерфейсу, структуре и т.п.), члену класса (полю, свойству, методу) Многие атрибуты предназначены для «хитрых» целей: отладки, взаимодействию с COM

Слайд 20


Некоторые встроенные атрибуты
Описание слайда:
Некоторые встроенные атрибуты

Слайд 21


Работа с существующими атрибутами // Этот класс можно сохранять на диске [Serializable] public class Motorcycle { bool hasRadioSystem; bool...
Описание слайда:
Работа с существующими атрибутами // Этот класс можно сохранять на диске [Serializable] public class Motorcycle { bool hasRadioSystem; bool hasHeadSet; bool hasBar; // Однако незачем утруждать себя сохранением этого поля [NonSerialized] float weightOfCurrentPassangers; }

Слайд 22


Создание пользовательских атрибутов public class VehicleDescriptionAttribute : System.Attribute { private string description; public string Desc {...
Описание слайда:
Создание пользовательских атрибутов public class VehicleDescriptionAttribute : System.Attribute { private string description; public string Desc { get { return description; } set { description = value; } } public VehicleDescriptionAttribute() {} public VehicleDescriptionAttribute(string desc) { description = desc;} }

Слайд 23


Применение пользовательских атрибутов [VehicleDescriptionAttribute("A very long, slow but feature rich auto")] public class WinExample {...
Описание слайда:
Применение пользовательских атрибутов [VehicleDescriptionAttribute("A very long, slow but feature rich auto")] public class WinExample { public WinExample() { } }

Слайд 24


Ограничение использования атрибута // Это перечисление позволяет определить, к чему можно будет // применять пользовательский атрибут public enum...
Описание слайда:
Ограничение использования атрибута // Это перечисление позволяет определить, к чему можно будет // применять пользовательский атрибут public enum AttributeTargets { All, Assembly, Class, Constructor, Delegate, Enum, Event, Field, Interface, Method, Module, Parameter, Property, ReturnValue, Struct, }

Слайд 25


Ограничение использования атрибута namespace CustomAtt { using System; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public...
Описание слайда:
Ограничение использования атрибута namespace CustomAtt { using System; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public class VehicleDescriptionAttribute : System.Attribute { private string description; public string Desc { get { return description; } set { description = value; } } public VehicleDescriptionAttribute() {} public VehicleDescriptionAttribute(string desc) { description = desc;} } }

Слайд 26


Аттрибуты уровня сборки и модуля // Гарантируем совместимость с CLS using System; [assembly:System.ClsCompliantAttribute(true)] namespace...
Описание слайда:
Аттрибуты уровня сборки и модуля // Гарантируем совместимость с CLS using System; [assembly:System.ClsCompliantAttribute(true)] namespace MyAttributes { [VehicleDescription ("A very long, slow but feature rich auto")] public class WinExample { public WinExample(){} // public ulong notCompilant } }

Слайд 27


Файл AssemblyInfo.cs
Описание слайда:
Файл AssemblyInfo.cs

Слайд 28


Аттрибуты уровня сборки и модуля // Рефлексия для пользовательских атрибутов public class AttReader { public static int Main(string[] args) { //...
Описание слайда:
Аттрибуты уровня сборки и модуля // Рефлексия для пользовательских атрибутов public class AttReader { public static int Main(string[] args) { // Получаем объект класса Type для Winnebago Type t = typeof(WinExample); // Получаем все атрибуты данной сборки object[] customAtts = t.GetCustomAttributes(false); // Выводим информацию о каждом атрибуте foreach(VehicleDescriptionAttribute v in customAtts) Console.WriteLine(v.Desc); return 0; } }



Похожие презентации
Mypresentation.ru
Загрузить презентацию