鉴于以下类别:
public class Person
{
public string Name { get; set; }
}
public static class ExtenionPerson
{
public static string GetPersonName(this Person person)
{
return person.Name;
}
}
其中一个人有一个名字,并且有一个扩展方法来获取该人名。现在,如果我这样做:
dynamic person = new Person { Name = "Jon" };
var name = person.GetPersonName();
会抛出一个RuntimeBinderException。
我知道不应该在动态对象上调用扩展方法,但为什么现在允许这样做?我的猜测是,因为扩展方法在编译时解析,动态对象在运行时解析,如intelisense所指定。这有多正确?