虽然我不确定它的实现,但我希望它使用反射。
基本上你打电话来
Type.GetProperty
或
Type.GetMethod
若要获取相关成员,请向它请求特定实例(或调用方法等)的该属性的值。或者有
Type.GetMembers
,
Type.GetMember
等。
如果你想使用“person.mother.name”或类似的“path”,就我所知,你必须对自己进行解析。(可能有一些框架可以为您完成这项工作,但它们不在反射API中。)
下面是一个简短但完整的示例:
using System;
using System.Reflection;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Test
{
static void Main()
{
Person jon = new Person { Name = "Jon", Age = 33 };
ShowProperty(jon, "Name");
ShowProperty(jon, "Age");
}
static void ShowProperty(object target, string propertyName)
{
// We don't need no stinkin' error handling or validity
// checking (but you do if you want production code)
PropertyInfo property = target.GetType().GetProperty(propertyName);
object value = property.GetValue(target, null);
Console.WriteLine(value);
}
}