Many people ask if there is a possibility to call a method, if we have its name as string. Actually, it is very useful feature. Imagine we have an Object with several properties which represent the same thing, but in different languages.
class MyClass
{
public string State_EN;
public string State_DE;
public string State_RU;
}
We want to show the state of MyClass object in proper language. We create a method for that
public string State(string language)
{
}
Language is the 2-letter code representation of language ("EN", "DE", "RU"...). So what should be inside the State method? Solutions with "if" and "switch" are not good - if you have to add more languages, you must rewrite the State method. But we are lazy and don't want to do that. What we need here is System.Reflection.
using System.Reflection;
[...]
public string State(string language)
{
PropertyInfo property = typeof(MyClass).GetProperty("State_" + language);//find the property
if (property != null)
return (string)property.GetValue(this, null);//get value of the property
return null;
}
The same way we can search for method, if we know the method's name (with GetMethod instead of GetProperty). And call it with "Invoke" and proper parameters.
No comments:
Post a Comment