Reflection in C# - Part 3

BindingFlags is used to declare how to fetch information from a type.

Common BindingFlags members:

1- Instance
2- Static
3- Public
4- NonPublic
5- IgnoreCase

There are many Methods available in a type to fetch Info:

1- GetConstructor
2- GetConstructors
3- GetField
4- GetFields
5- GetMethod
6- GetMethods
7- GetEvent
8- GetEvents
9- GetProperty
10- GetProperties


Example:

Imports System Imports System.IO
Imports System.Reflection

Class ListMembers
{
   
Public void Main()
    {  
     
' Specifies the class.
        Dim t As Type = GetType(System.IO.BufferedStream);
        Console.WriteLine(
"Listing all the members (public and non public) of the {0} type", t);
       
' Lists static fields first.
        FieldInfo[] fi = t.GetFields((BindingFlags.Static  | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine(
"// Static Fields");
        PrintMembers(fi);
       
' Static properties.
        PropertyInfo[] pi = t.GetProperties((BindingFlags.Static  | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine(
"// Static Properties");
        PrintMembers(pi);
       
' Static events.
       EventInfo[] ei = t.GetEvents((BindingFlags.Static  | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine("// Static Events");
        PrintMembers(ei);
       
' Static methods.
        MethodInfo[] mi = t.GetMethods((BindingFlags.Static  | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine("// Static Methods");
        PrintMembers(mi);

        ConstructorInfo[] ci = t.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine("// Constructors");
        PrintMembers(ci);

        fi = t.GetFields((BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine("// Instance Fields");
        PrintMembers(fi);

        pi = t.GetProperties((BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine("// Instance Properties");
        PrintMembers(pi);
  
        ei = t.GetEvents((BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine("// Instance Events");
        PrintMembers(ei);

        mi = t.GetMethods((BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public));
        Console.WriteLine(
"// Instance Methods");
        PrintMembers(mi);
        Console.WriteLine(ControlChars.CrLf &
"Press ENTER to exit.");
        Console.Read();

    
}

    Public void PrintMembers(MemberInfo[] ms)
    {

        MemberInfo m ;
        f
oreach (m in  ms)
            Console.WriteLine(
"{0}{1}", "     ", m);
        Console.WriteLine();

   
}
}


Design Patterns Used by Reflection classes

in Reflection there are some patterns we use to fetch and filter lists of Type

1- FindXXX()
2- GetXXX(<parameters>)
3- GetXXXs()
4- GetXXXs(<parameters>)