Чи можна встановити приватну власність за допомогою відображення?
public abstract class Entity
{
private int _id;
private DateTime? _createdOn;
public virtual T Id
{
get { return _id; }
private set { ChangePropertyAndNotify(ref _id, value, x => Id); }
}
public virtual DateTime? CreatedOn
{
get { return _createdOn; }
private set { ChangePropertyAndNotify(ref _createdOn, value, x => CreatedOn); }
}
}
Я спробував таке, і це не працює, де t
представляє тип Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
Я думаю, що я можу це зробити, але не можу це зробити.
2
Я знаю, що це пізно, але я знайшов потребу в цій думці, що поділюсь своїм "чому". Мені потрібно було подолати незручність у сторонніх програмах. Зокрема, я використовував метод Crystal Reports ExportToStream. Спосіб написання цього методу не дозволяв доступ до внутрішнього буфера потоку. Щоб надіслати звіт до браузера, мені довелося скопіювати потік у новий буфер (100 К +), а потім надіслати його. Встановивши приватне поле "_exposable" в об'єкті потоку на "true", я зміг направити внутрішній буфер безпосередньо, заощадивши 100K + виділення на кожен запит.
—
Рей
Чому? Скажімо, у вас є приватні налаштування ваших властивостей Id для всіх об’єктів вашого домену, і ви хочете реалізувати тести репозиторію. Тоді лише в тестовому проекті вашого сховища ви хочете мати можливість встановити властивість Id.
—
bounav
Ще один сценарій використання: встановлення автоматично згенерованих полів, таких як "дата створення" при імпорті даних.
—
ANeves
Ще одне, чому мені просто цікаво, якщо це можливо. Ось як я закінчився переглядом цього питання.
—
Калеб Мауер