Хотя я точно не знаю о его реализации, я ожидаю, что он будет использовать отражение.
Обычно вы вызываете Type.GetProperty
или Type.GetMethod
, чтобы получить соответствующий элемент, а затем запрашиваете значение этого свойства для конкретного экземпляра (или вызываете метод, так далее). В качестве альтернативы есть Type.GetMembers
, Type.GetMember
и т. Д.
Если вы хотите иметь возможность использовать «Person.Mother.Name» или аналогичные «пути», вы должны выполнять этот анализ самостоятельно, насколько я знаю. (Могут быть кусочки фреймворка, чтобы сделать это за вас, но они не в 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);
}
}