Reflection in .NET

Outline

All .net assemblies have ‘METADATA' information stored about the type defined in MODULES.

This metadata information can be accessed by a mechanism called as ‘REFLECTION'.

Introduction

Reflection is used when you don't know at compile time which time your object is or what action to do or on what property. REFLECTION provides several functionalities to assembly ‘METADATA'. Through using reflection you can also dynamically invoke methods. For invoking methods you need to add a namespace, as given below-

System. Type.Invokemember //invoking method //

You can dynamically invoke methods, on basis of that example:

Ex:

Public Class Ref

    Private Sub Ref_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim Pobjtype As Type

        Dim PobjObject As Object

        Dim objButtons As New Windows.Forms.Button()

        Pobjtype = PobjButtons.Get Type ()

        For Each PobjObject In Pobjtype.GetMembers

            LstDisplay.Items.add(PobjObject.ToString())

        Next

    End Sub

End Class

Applications

There are many uses for reflection. The DOTNET Framework uses it for

  • Serialization
  • Data Binding
  • For Creating Tools

(It can also be used for creating tools) that examine your code like Reflector, FxCop and NUnit as well as ORM database frameworks. It has a wide variety of uses at runtime from logging specific things about an object to Dependency Injection Frameworks. It can also be used to dynamically execute methods or set properties at runtime as is done with custom attributes. It can also be used in higher level programming such as meta programming and self-modifying code.

Conclusion

It can also be very useful when testing your application, e.g. unit tests or other types of test frameworks.

Ex

Create an xml file (or some other input data file in suitable format) and have your program analyze it and call methods that are defined in the file. This is how ‘Fitnesse work'.

Next Recommended Reading Voice Recorder in Visual Basic .NET