Presentation is loading. Please wait.

Presentation is loading. Please wait.

Kalpesh Padia Reflection in.Net. OVERVIEW 9/19/2015 2.

Similar presentations


Presentation on theme: "Kalpesh Padia Reflection in.Net. OVERVIEW 9/19/2015 2."— Presentation transcript:

1 Kalpesh Padia Reflection in.Net

2 OVERVIEW 9/19/2015 2

3 INTRODUCTION Reflection – What it is? Why reflection? 9/19/2015 3

4 LOOKING BACK: AUTOMATION AND COM TYPE INFO 9/19/2015 4 TypeLibraries contain type information Exploration through ITypeLib/ITypeInfo Attributes describe behavior of elements e.g. Directionality of parameters e.g. Method role (instance method, property) Dynamic Invocation using IDispatch Type system supports most popular simple types Dynamic types using VARIANT Arrays passed using SAFEARRAY Strings expressed as BSTR

5 WHAT'S WRONG WITH THAT? 9/19/2015 5 Automation client model favors VisualBasic Automation server model favors C/C++ ITypeInfo and IDispatch are way too complicated Information model is limited No sufficient support for complex types SAFEARRAYs are a pain from C/C++ BSTRs are difficult to manage from C/C++ Type information separate from code

6 .NET REFLECTION CORE CONCEPTS 9/19/2015 6 Metadata Single location for type information and code Code is literally contained within type information Every.NET object can be queried for its type Types' metadata can be explored with Reflection Dynamic Type System Highly dynamic and language independent Types may be extended and built at run-time Allows on-the-fly creation of assemblies.NET Compilers use.NET to emit.NET code

7 EXPLORING METADATA 9/19/2015 7

8 METADATA: TYPE INFO AT RUNTIME 9/19/2015 8 GetType()

9 WHO ARE YOU? 9/19/2015 9 Accessing meta-data: System.Object.GetType() All.NET classes (implicitly) inherit System.Object Available on every.NET class; simple types too Explicit language support for type meta-data C#, JScript.NET: typeof(…) VB.NET: If TypeOf … Is … Then … Determining Type Identity Types have unique identity across any assembly Types can be compared for identity if ( a.GetType() == b.GetType() ) { … };

10 SYSTEM.TYPE 9/19/2015 10 Access to meta-data for any.NET type Returned by System.Object.GetType() Allows drilling down into all facets of a type Category: Simple, Enum, Struct or Class Methods and Constructors, Parameters and Return Fields and Properties, Arguments and Attributes Events, Delegates and Namespaces

11 WHAT ARE YOU? 9/19/2015 11 Value, Interface or Class? IsValueType, IsInterface, IsClass Public, Private or Sealed ? IsNotPublic, IsSealed Abstract or Implementation? IsAbstract Covers all possible properties of a managed type Very intuitive API, no "Parameter Hell"

12 ANYTHING SPECIAL ABOUT YOU? 9/19/2015 12 Special Memory Layout? IsAutoLayout IsExplicitLayout IsLayoutSequential COM Objects? IsCOMObject More… IsUnicodeClass IsSpecialName, etc.

13 NOW TELL ME WHAT YOU HAVE! 9/19/2015 13 Finding and Exploring Members MemberInfo: GetMembers(), FindMembers() Exploring Fields and Properties FieldInfo: GetFields(), PropertyInfo: GetProperties() Exploring Constructors, Methods and Events GetConstructors(), GetMethods(), GetEvents() Exploring attributes, determining implemented interfaces, enumerating nested types, … Summary: Everything you may ever want to know

14 TYPE AND INSTANCES 9/19/2015 14 Type Safety First! Type checking at runtime C#: if ( o is Customer ) { … } VB: If TypeOf o Is Customer Then … End If Dynamic Invocation through Reflection Support for late binding MethodInfo.Invoke() FieldInfo.SetValue() PropertyInfo.SetValue()

15 DETAIL INFORMATION 9/19/2015 15

16 MEMBERINFO 9/19/2015 16 Base class for all "member" element descriptions Fields, Properties, Methods, etc. Provides member kind, name and declaring class MemberInfo MethodBaseParameterInfoFieldInfoEventInfoPropertyInfo MethodInfoConstructorInfo

17 FIELDINFO, PROPERTYINFO 9/19/2015 17 FieldInfo Field data type and attributes Static or Instance field, protection level Can set value through reflection Provides low-level, direct access with SetValueDirect() PropertyInfo Property type and attributes Test methods for readability, writeability "get" and "set" MethodInfo Indexer ParameterInfo Can invoke "set" and "get" through Reflection

18 METHODINFO, CONSTRUCTORINFO 9/19/2015 18 MethodInfo Return type and attributes List of all parameters as ParameterInfo array Detail implementation information through flag-field Can invoke method through Reflection ConstructorInfo Same features as MethodInfo, just for constructors

19 ATTRIBUTES 9/19/2015 19 Custom attributes are the killer-app for Reflection! Attributes enable declarative behavior Attributes allow data augmentation

20 THE BIGGER PICTURE 9/19/2015 20 Types know their Module, Modules know their types Modules know their Assembly and vice versa Code can browse and search its entire context

21 BUILDING TYPES AT RUNTIME 9/19/2015 21

22 INTRODUCING SYSTEM.REFLECTION.EMIT 9/19/2015 22 Full representation of physical structure Allows building modules and assemblies at runtime Transient code only used at runtime Persistent code for reuse Create classes, types and emit IL Used by.NET compilers to build.NET apps

23 WHY? SOME SCENARIOS… 9/19/2015 23 Build classes dynamically from script-like code ASP.NET, Regular Expressions do just that ! Generate code from visual development tools e.g. build interfaces, base classes from UML Create dynamic wrappers for existing code Transfer code-chunks to remote machines Distributed processing scenarios (like SETI@home)

24 BUILDING ASSEMBLIES 9/19/2015 24 System.Reflection.Emit.AssemblyBuilder Dynamically create new assemblies Create manifest and resources Add modules Specify security requirements Can be persisted as files or held in memory Act and behave like any other assembly

25 BUILDING MODULES 9/19/2015 25 System.Reflection.Emit.ModuleBuilder Modules contain types, classes and code Allows creating fully functional modules with code Can associate source code Emit debug symbols Acts like any module created by any.NET compiler

26 WRITING IL 9/19/2015 26 Emit accepts IL (Intermediate Language) code Same code as emitted by C#, VB.NET, Eiffel# IL is optimized and translated into machine code Reflection.Emit puts you "on-par" Same backend as.NET compilers Same access to code-generation Languages are mostly scanners and parsers For more info see System.CodeDOM

27 PUTTING IT TOGETHER 9/19/2015 27

28 VISUALSTUDIO.NET AND REFLECTION 9/19/2015 28

29 WHAT ASP.NET DOES WITH A PAGE 9/19/2015 29

30 QUESTIONS 9/19/2015 30

31 THANK YOU 9/19/2015 31


Download ppt "Kalpesh Padia Reflection in.Net. OVERVIEW 9/19/2015 2."

Similar presentations


Ads by Google