Cool Programming Functionality: Reflection

In Microsoft's .NET Framewowk, Reflection describes the ability to interpret types dynamically at runtime, or, as the documentation puts it: "The classes in the Reflection namespace, together with System.Type, allow you to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. You can also use reflection to create type instances at run time, and to invoke and access them." I've been making use of this lately, and wondering how I could have solved certain tasks without it.

Here's a quick example function in C# that takes a namespace name, class name, and method name as parameters, then instantiates the specified class and calls the specified method. This is just a quickie, so I'm forgoing a lot of things like error handling, etc. The code itself is mine, but the architecture behind it is from a colleague of mine named Bill Butler (Xcent).

public void ExecObjectMethod( string NamespaceName, string ClassName, string MethodName ) {
Assembly targetassembly = null;
Type targettype;
object targetobject = null;

//Load assembly. To load an assembly not directly referenced by the app, you
//could use the LoadFromFile() method.
targetassembly = Assembly.Load( NamespaceName );

//Get the type to instantiate based on ClassName parameter
targettype = targetassembly.GetType( NamespaceName + "." + ClassName );
if( targettype == null ) throw new Exception( "Could not get type " + NamespaceName + "." + ClassName );

//Create an instance of the class
targetobject = Activator.CreateInstance( targettype );

//Call the specified method
//If you wanted, you could also supply parameters to the method
targettype.InvokeMember( MethodName, BindingFlags.InvokeMethod, null, targetobject, null );

//Clean up
targetobject = null;
targetassembly = null;
}

Comments

Popular Posts

Resolving the "n timer(s) still in the queue" Error In Angular Unit Tests

How to Get Norton Security Suite Firewall to Allow Remote Desktop Connections in Windows

How to Determine if a Column Exists in a DataReader

Silent Renew and the "login_required" Error When Using oidc-client

Fixing the "Please add a @Pipe/@Directive/@Component annotation" Error In An Angular App After Upgrading to webpack 4