Простое и высокоуровневое объяснение состоит в том, что кэш создается для каждого типа и для каждого сайта вызова. В приведенном выше примере сайты вызовов соответствуют строкам кода. Таким образом, кеш не используется ни для одной из строк.
Примером использования кэша является обращение к свойству в цикле, например:
for (int i = 0; i < 10; i++)
obj.Property = i;
В приведенном выше примере привязка будет выполнена один раз, когда i = 0
, и затем кеш будет использоваться для следующих 9 вызовов.
Более сложный пример использования кэша:
public class Class1 : MyDynamicImpelementation {}
public class Class2 : MyDynamicImpelementation {}
static class Class
{
public void PropertyAccess(dynamic obj)
{
for (int i = 0; i < 10; i++)
obj.Property = i;
}
public void Main(string[] args)
{
PropertyAccess(new Class1());
PropertyAccess(new Class2());
}
}
В приведенном выше примере привязка будет выполнена только один раз для obj
типа Class1
и i = 0
, затем кеш будет использоваться для остальных вызовов цикла и для obj
типа Class2
и любой i
.
В качестве заключения:
BindGetMethod
и BindSetMethod
вызываются, если свойство доступно из разных строк кода или тип значения отличается.