ฉันสามารถตั้งค่าคุณสมบัติส่วนตัวผ่านการสะท้อนแสงได้หรือไม่?
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 วิธีการเขียนวิธีนี้ไม่อนุญาตให้เข้าถึงบัฟเฟอร์ภายในของสตรีม ในการส่งรายงานไปยังเบราว์เซอร์ฉันต้องคัดลอกสตรีมไปยังบัฟเฟอร์ใหม่ (100K +) จากนั้นส่งออก ด้วยการตั้งค่าฟิลด์ "_exposable" ส่วนตัวในวัตถุสตรีมเป็น "จริง" ฉันสามารถส่งบัฟเฟอร์ภายในออกได้โดยตรงโดยประหยัดการจัดสรร 100K + สำหรับแต่ละคำขอ
—
Ray
ทำไม? สมมติว่าคุณมีตัวตั้งค่าส่วนตัวในคุณสมบัติ Id ของคุณในออบเจ็กต์โดเมนทั้งหมดของคุณและคุณต้องการใช้การทดสอบที่เก็บ จากนั้นในโครงการทดสอบที่เก็บของคุณเท่านั้นที่คุณจะต้องสามารถตั้งค่าคุณสมบัติ Id ได้
—
bounav
สถานการณ์การใช้งานอื่น: การตั้งค่าช่องที่สร้างขึ้นโดยอัตโนมัติเช่น "วันที่สร้าง" เมื่อนำเข้าข้อมูล
—
ANeves
อีกอย่างทำไมฉันแค่อยากรู้ว่าเป็นไปได้ไหม นั่นคือวิธีที่ฉันดูคำถามนี้
—
Caleb Mauer