Reflection Programming under the hood SoftUni Team Technical Trainers Software University

Slides:



Advertisements
Similar presentations
Software Quality Assurance QA Engineering, Testing, Bug Tracking, Test Automation Software University Technical Trainers SoftUni Team.
Advertisements

Introduction to Programming
Other Types in OOP Enumerations, Structures, Generic Classes, Attributes Svetlin Nakov Technical Trainer Software University
 Dimitar Ivanov Introduction to programming with microcontrollers.
C# Advanced Topics Methods, Classes and Objects SoftUni Team Technical Trainers Software University
AngularJS Routing Routes, Route Parameters, Templates, Location, Navigation SoftUni Team Technical Trainers Software University
AngularJS Services Built-in and Custom Services SoftUni Team Technical Trainers Software University
Methods Writing and using methods, overloads, ref, out SoftUni Team Technical Trainers Software University
Software University Curriculum, Courses, Exams, Jobs SoftUni Team Technical Trainers Software University
Fundamentals SoftUni Welcome to Software University SoftUni Team Technical Trainers Software University
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC SoftUni Team Technical Trainers Software University
AngularJS Directives Defining Custom Directives SoftUni Team Technical Trainers Software University
Software Testing Lifecycle Exit Criteria Evaluation, Continuous Integration Ivan Yonkov Technical Trainer Software University.
Teamwork and Personal Skills Course Introduction Software University SoftUni Team Technical Trainers.
Fundamentals SoftUni Welcome to Software University SoftUni Team Technical Trainers Software University
Design Patterns: Structural Design Patterns
High-Quality Programming Code Code Correctness, Readability, Maintainability, Testability, Etc. SoftUni Team Technical Trainers Software University
JavaScript Design Patterns Private Fields, Module, Revealing Module, Revealing Prototype, … Software University Technical Trainers SoftUni.
Conditional Statements Implementing Control-Flow Logic in C# SoftUni Team Technical Trainers Software University
Consuming REST Services from C# SoftUni Team Technical Trainers Software University
Loops Repeating Code Multiple Times SoftUni Team Technical Trainers Software University
Database APIs and Wrappers
Entity Framework Performance SoftUni Team Technical Trainers Software University
Svetlin Nakov Technical Trainer Software University
Build Processes and Continuous Integration Automating Build Processes Software University Technical Trainers SoftUni Team.
Delegates and Events Callback Functionality and Event-Driven Programming Svetlin Nakov Technical Trainer Software University
Processing Redis with.NET How to Operate with Redis Databases SoftUni Team Technical Trainers Software University
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC Angel Georgiev Part-time Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
Defining Classes Classes, Fields, Constructors, Methods, Properties SoftUni Team Technical Trainers Software University
Static Members and Namespaces Static Members, Indexers, Operators, Namespaces SoftUni Team Technical Trainers Software University
Arrays, Lists, Stacks, Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Controllers and Markup Controllers, $scope, Markup, Directives, Expressions, Binding, Filters, Validation SoftUni Team Technical Trainers Software University.
AMD and RequireJS Splitting JavaScript Code into Dependent Modules Software University Technical Trainers SoftUni Team.
Asynchronous Web Services Writing Asynchronous Web Services SoftUni Team Technical Trainers Software University
C# Basics Course Introduction Svetlin Nakov Technical Trainer Software University
Defining Classes Classes, Fields, Constructors, Methods, Properties Svetlin Nakov Technical Trainer Software University
Jekyll Static Site Generator Template-Based Site Generation Svetlin Nakov Technical Trainer Software University
JavaScript Modules and Patterns Private Fields, Module, Revealing Module, Revealing Prototype, … Software University Technical Trainers.
Exam Preparation Algorithms Course: Sample Exam SoftUni Team Technical Trainers Software University
High-Quality Programming Code Code Correctness, Readability, Maintainability Svetlin Nakov Technical Trainer Software University
High-Quality Code: Course Introduction Course Introduction SoftUni Team Technical Trainers Software University
Design Patterns: Structural Design Patterns General and reusable solutions to common problems in software design Software University
Advanced C# Course Introduction SoftUni Team Technical Trainers Software University
Object-Oriented Programming Course Introduction Svetlin Nakov Technical Trainer Software University
Mocking with Moq Tools for Easier Unit Testing SoftUni Team Technical Trainers Software University
Operators and Expressions
Mocking Unit Testing Methods with External Dependencies SoftUni Team Technical Trainers Software University
Mocking with Moq Mocking tools for easier unit testing Svetlin Nakov Technical Trainer Software University
JavaScript Tools Tools for Writing / Editing / Debugging JavaScript Code Svetlin Nakov Technical Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding Svetlin Nakov Technical Trainer Software University
Sets, Dictionaries SoftUni Team Technical Trainers Software University
Creating Content Defining Topic, Creating Technical Training Materials SoftUni Team Technical Trainers Software University
High-Quality Code: Course Introduction Course Introduction SoftUni Team Technical Trainers Software University
Functional Programming Data Aggregation and Nested Queries Ivan Yonkov Technical Trainer Software University
Programming Fundamentals Course Introduction SoftUni Team Technical Trainers Software University
Doctrine The PHP ORM SoftUni Team Technical Trainers Software University
Creating Content Defining Topic, Creating Technical Training Materials SoftUni Team Technical Trainers Software University
ASP.NET MVC Course Program, Trainers, Evaluation, Exams, Resources SoftUni Team Technical Trainers Software University
Inheritance Class Hierarchies SoftUni Team Technical Trainers Software University
Static Members Static Variables & Methods SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
C# OOP Advanced Course Introduction SoftUni Team Technical Trainers Software University
Java OOP Advanced Course Introduction SoftUni Team Technical Trainers Software University
High-Quality Programming Code Code Correctness, Readability, Maintainability, Testability, Etc. SoftUni Team Technical Trainers Software University
Reflection SoftUni Team Technical Trainers Java OOP Advanced
Mocking tools for easier unit testing
Reflection SoftUni Team Technical Trainers C# OOP Advanced
Reflection SoftUni Team Technical Trainers C# OOP Advanced
Presentation transcript:

Reflection Programming under the hood SoftUni Team Technical Trainers Software University

2  What is reflection?  Pros and cons  Using reflection  Assemblies  Types and members  Dynamic invocation  Generics  Example: Unit Testing System Table of Contents

 A way of inspecting and modifying the program behaviour at runtime  Inspecting and changing the values of variables  Inspecting compiled metadata in an assembly  Invoking methods Reflection Assembly (.exe or.dll) Module Assembly Manifest (name, version, culture) Metadata (info for all of the assembly types) Resources (optional) (text files, images, strings)

 Reflection is commonly used to  Examine assembly metadata  Examine types  Invoke methods dynamically  Inspect an object at runtime without knowing its class  Examples  ASP.NET MVC, Entity Framework, decompilers, debuggers, testing frameworks… Reflection Usages

 Reflection may be good but comes at a price  Writing more code  Code which executes more slowly  “Golden Hammer” antipattern  Over-reliance on a familiar tool  A lot of casting and type checks  Makes it even slower  Possible “magic strings” Costs of Using Reflection

 First, try not to use reflection :)  Try to cache all reflected metadata  Dynamically load assemblies and types only once  Usually at startup  Cast types to a known interface  All method calls go through the interface  Avoid MethodInfo.Invoke() and private members – they are slow  Balance between performance, safety, and flexibility Best Practices

Loading Assemblies Load libraries dynamically

 Assembly.Load(…) – loads existing assembly by name or AssemblyName object  If it fails to find it, throws a FileNotFoundException  Assembly.LoadFrom(…) – loads existing assembly by path  If it fails to find it, throws a FileNotFoundException The Assembly Class Assembly sampleAssembly = Assembly.Load(“SampleAssembly, Version= , Culture=neutral,PublicKeyToken=8744b20f8da049e3”); Assembly.Load(“SampleAssembly, Version= , Culture=neutral,PublicKeyToken=8744b20f8da049e3”); Assembly myAssembly =

 System.Reflection.Assembly  FullName – name, version, culture, public key token  Location – file from which the assembly is loaded  EntryPoint – the starting / Main() method  GlobalAssemblyCache – indicates whether the assembly has been loaded from the GAC  A collection of assemblies shared between applications Assembly Properties

Loading Assemblies Live Demo

System.Type Inspecting and Modifying Types

 System.Type is a starting point for inspecting.NET types  Fields, methods, properties, events, inner types, etc.  Assembly.GetTypes() – lists all types in the given assembly  System.Type Properties  BaseType, Attributes, Name, FullName, IsClass, IsEnum, IsInterface, IsAbstract, IsSealed, IsVisible …  System.Type Methods  GetConstructors(), GetFields(), GetProperties(), GetEvents(), GetMethods(), GetCustomAttributes() … The System.Type Class

 Inspecting type members  Invoking a private method Examples MethodInfo[] methods = typeof(MyClass).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance); Assembly currentAssembly = Assembly.GetExecutingAssembly(); foreach (Type type in currentAssembly.GetTypes()) { Console.WriteLine("== {0}:", type.Name); Console.WriteLine("== {0}:", type.Name); foreach (MemberInfo member in type.GetMembers()) foreach (MemberInfo member in type.GetMembers()) { Console.WriteLine("{0}: {1}", member.MemberType, member.Name); Console.WriteLine("{0}: {1}", member.MemberType, member.Name); }}

Inspecting Type Members Live Demo

MemberInfo Hierarchy System.Reflection.MemberInfo System.Reflection.EventInfo System.Reflection.FieldInfo System.Reflection.MethodBase System.Reflection.ConstructorInfo System.Reflection.PropertyInfo System.Reflection.MethodInfo System.Type

 Type.GetMethod(…) – returns the reflection of a method  Returns a MethodInfo object  MethodInfo.GetParameters() – returns a collection of all parameters for the given method  Returns a ParameterInfo object Inspecting Methods MethodInfo method = myType.GetMethod(“SomeMethod”); foreach(ParameterInfo param in method.GetParameters()) { Console.WriteLine(param.ParameterType); Console.WriteLine(param.ParameterType);}

 Instantiating an object – Activator class  CreateInstance(…)  Creates an instance of the given type (string or Type object)  CreateInstanceFrom(…)  Creates an instance of the given type from the given assembly  MethodInfo.Invoke()  Dynamically invokes a method  Can be used for both static and instance methods Dynamic Method Invocation

Examples public class MyClass { static void Main() static void Main() { var type = typeof(MyClass); var type = typeof(MyClass); type.GetMethod("InstanceMethod") type.GetMethod("InstanceMethod").Invoke(new MyClass() { }, null); type.GetMethod("InstanceMethodWithParameters").Invoke(new MyClass() { }, new[] { "param" }); type.GetMethod("StaticMethod").Invoke(new Program() { }, null); } public void InstanceMethod(){ … } public void InstanceMethod(){ … } public void InstanceMethodWithParameters(string param){ … } public void InstanceMethodWithParameters(string param){ … } public static void StaticMethod(){ … } public static void StaticMethod(){ … }}

Dynamic Method Invocation Live Demo

 Reflection supports generic types  Can get the generic parameters at runtime  Some of the generic reflection methods:  MethodInfo.IsGenericMethod()  MethodInfo.GetGenericArguments()  Type.IsGenericType()  Type.GetGenericTypeDefinition()  Converts MyType to MyType Working with Generics

Unit Testing System Live Demo

? ? ? ? ? ? ? ? ? Reflection

License  This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" licenseCreative Commons Attribution- NonCommercial-ShareAlike 4.0 International 23  Attribution: this work may contain portions from  "Fundamentals of Computer Programming with C#" book by Svetlin Nakov & Co. under CC-BY-SA licenseFundamentals of Computer Programming with C#CC-BY-SA  "OOP" course by Telerik Academy under CC-BY-NC-SA licenseOOPCC-BY-NC-SA

SoftUni Diamond Partners

Free Software University  Software University Foundation – softuni.orgsoftuni.org  Software University – High-Quality Education, Profession and Job for Software Developers  softuni.bg softuni.bg  Software Facebook  facebook.com/SoftwareUniversity facebook.com/SoftwareUniversity  Software YouTube  youtube.com/SoftwareUniversity youtube.com/SoftwareUniversity  Software University Forums – forum.softuni.bgforum.softuni.bg