Прежде всего, приведенный вами пример не имеет свойств.У него есть закрытые переменные-члены.Для свойств у вас будет что-то вроде:
public class Person
{
public int Age { get; private set; }
public string Name { get; private set; }
public Person(int age, string name)
{
Age = age;
Name = name;
}
}
И затем с помощью отражения получите значения:
public object GetVal(string propName)
{
var type = this.GetType();
var propInfo = type.GetProperty(propName, BindingFlags.Instance);
if(propInfo == null)
throw new ArgumentException(String.Format(
"{0} is not a valid property of type: {1}",
propName,
type.FullName));
return propInfo.GetValue(this);
}
Имейте в виду, хотя, поскольку у вас уже есть доступ к классу и его свойствам (поскольку у вас также есть доступ к методу), гораздо проще просто использовать свойства, а не делать что-то причудливое с помощью Reflection.