У меня есть эти типы:
public class GenericDao<T>
{
public T Save(T t)
{
return t;
}
}
public abstract class DomainObject {
// Some properties
protected abstract dynamic Dao { get; }
public virtual void Save() {
var dao = Dao;
dao.Save(this);
}
}
public class Attachment : DomainObject
{
protected dynamic Dao { get { return new GenericDao<Attachment>(); } }
}
Затем, когда я запускаю этот код, он терпит неудачу с RuntimeBinderException: Лучшее совпадение перегруженного метода для GenericDAO
var obj = new Attachment() { /* set properties */ };
obj.Save();
Я проверил, что в DomainObject.Save () «this» определенно является вложением, поэтому ошибка на самом деле не имеет смысла. Может ли кто-нибудь пролить свет на то, почему метод не разрешается?
Дополнительная информация - Успешно, если я изменю содержимое DomainObject.Save () для использования отражения:
public virtual void Save() {
var dao = Dao;
var type = dao.GetType();
var save = ((Type)type).GetMethod("Save");
save.Invoke(dao, new []{this});
}