Вы можете сделать что-то вроде этого, псевдокод :
public class MyClass
{
public object this[string PropertyName]
{
get
{
Type myType = typeof(MyClass);
System.Reflection.PropertyInfo pi = myType.GetProperty(PropertyName);
return pi.GetValue(this, null); //not indexed property!
}
set
{
Type myType = typeof(MyClass);
System.Reflection.PropertyInfo pi = myType.GetProperty(PropertyName);
pi.SetValue(this, value, null); //not indexed property!
}
}
}
и после использования, например,
MyClass cl = new MyClass();
cl["MyClassProperty"] = "cool";
Обратите внимание, что это не полное решение,так как вам нужно «поиграть» с BindingFlags во время доступа к отражению, если вы хотите иметь непубличные свойства / поля, статические и так далее.