Just been
reading a post by
Geoff Appleby on the pros and cons of reflection. He also points to a very
interesting use of reflection by
Darren Neimke to control the routing of messages within a system like BizTalk.
I have similar reservations to using reflection that Geoff has - mainly because I came from a Java world where reflection could just totally kill performance. However I also agree that there's some situations where it's just incredibly useful - I recently used reflection in an application which uses User Controls to provide functionality, well occasionally I had to set some specific properties on controls (just let me reuse the same control with different properties set..) here's the code I use
private void SetCustomProperties(UserControl uctrl, FControl defCtrl)
{
Type uctrlType = uctrl.GetType().BaseType;
if (defCtrl.Settings != null && defCtrl.Settings.Count > 0)
{
foreach (string s in defCtrl.Settings.AllKeys)
{
PropertyInfo theProperty = uctrlType.GetProperty(s);
if (theProperty != null)
{
object val = null;
Type testType = theProperty.PropertyType;
if (testType.IsEnum)
val = Convert.ChangeType(Enum.Parse(testType, defCtrl.Settings[s]), testType);
else
val = Convert.ChangeType(defCtrl.Settings[s], testType);
if (val != null)
theProperty.SetValue(uctrl, val, null);
}
}
}
}
So, obviously lots of wierd custom classes and stuff but you can probably see it's actually pretty simple in the end.