Dapatkah saya menetapkan properti pribadi melalui refleksi?
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); }
}
}
Saya sudah mencoba yang berikut ini dan tidak berhasil, di mana t
mewakili jenis dari Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
Saya kira saya bisa melakukan ini tetapi saya tidak bisa menyelesaikannya.
2
Saya tahu ini terlambat, tetapi saya menemukan kebutuhan untuk pemikiran ini, saya akan membagikan 'mengapa' saya. Saya perlu mengatasi ketidaknyamanan di beberapa perangkat lunak pihak ketiga. Secara khusus, saya menggunakan metode Crystal Reports ExportToStream. Cara metode ini ditulis, akses ke buffer internal aliran tidak diizinkan. Untuk mengirim laporan ke browser, saya harus menyalin aliran ke buffer baru (100K +), lalu mengirimkannya. Dengan menyetel bidang pribadi '_exposable' di objek aliran ke 'benar', saya dapat mengirim buffer internal keluar secara langsung, menghemat alokasi 100K + pada setiap permintaan.
—
Ray
Mengapa? Katakanlah Anda memiliki penyetel pribadi pada properti Id Anda di semua objek domain Anda dan Anda ingin mengimplementasikan pengujian repositori. Kemudian, hanya dalam proyek pengujian repositori Anda, Anda ingin dapat menyetel properti Id.
—
bounav
Skenario penggunaan lainnya: menyetel bidang yang dibuat secara otomatis seperti "tanggal pembuatan" saat mengimpor data.
—
ANeves
Alasan lainnya adalah saya hanya ingin tahu apakah itu mungkin. Begitulah akhirnya saya melihat pertanyaan ini.
—
Caleb Mauer