Получить набор аксессоров для свойства в абстрактном классе, не возможно? - PullRequest
4 голосов
/ 17 мая 2010

Учитывая класс ':

public abstract class AbstractEntity
{
    public virtual Guid Id { get; private set; }
}

public class Entity
{
    public virtual Guid Id { get; private set; }
}

И PropertyInfo для свойства 'Id'.

При вызове метода:

PropertyInfo.GetAccessors()

Возвращает и метод get, и метод set, когда класс не abstract (Entity), но только метод get, когда класс абстрактный (AbstractEntity).

Почему это? И есть ли другой способ получить метод set из свойства с закрытым набором?

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Если вы хотите получить MethodInfo для набора, вы можете. Это не значит, что вы можете использовать его, как указывает Кевин в своем ответе.

Type t = typeof(AbstractEntity);
MethodInfo[] mi = t.GetProperty("Id").GetAccessors(true);
1 голос
/ 17 мая 2010

В абстрактном классе вы не можете создать его экземпляр. За исключением размышлений, нет ничего, что может вызвать частный сеттер. В отражении вам все еще нужно создать экземпляр класса (не включая статические элементы), чтобы получить доступ к свойствам, вызову методов и т. Д., Что нельзя сделать в абстрактном классе. Возможность получить к нему доступ не даст вам ничего, и фактически ничто не может получить к нему доступ, чтобы использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...