Tôi có thể thiết lập một tài sản riêng thông qua sự phản ánh?
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ôi đã thử các cách sau và nó không hoạt động, trong đó t
đại diện cho một loại Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
Tôi đoán tôi có thể làm điều này nhưng tôi không thể làm được.
2
Tôi biết điều này là muộn, nhưng tôi thấy cần một suy nghĩ này, tôi sẽ chia sẻ 'tại sao' của mình. Tôi cần khắc phục sự bất tiện trong một số phần mềm của bên thứ ba. Cụ thể, tôi đang sử dụng phương thức Crystal báo cáo xuất khẩu. Cách viết phương pháp này, không được phép truy cập vào bộ đệm bên trong của luồng. Để gửi báo cáo tới trình duyệt, tôi đã phải sao chép luồng vào bộ đệm mới (100K +), sau đó gửi nó ra. Bằng cách đặt trường '_ex Dùng riêng' trong đối tượng luồng thành 'true', tôi có thể gửi bộ đệm nội bộ trực tiếp ra ngoài, tiết kiệm phân bổ 100K + cho mỗi yêu cầu.
—
Ray
Tại sao? Giả sử bạn có setters riêng trên các thuộc tính Id trên tất cả các đối tượng miền của bạn và bạn muốn triển khai kiểm tra kho lưu trữ. Sau đó, chỉ trong dự án kiểm tra kho lưu trữ của bạn, bạn mới muốn có thể đặt thuộc tính Id.
—
bounav
Một kịch bản sử dụng khác: thiết lập các trường được tạo tự động như "ngày tạo" khi nhập dữ liệu.
—
ANeves
Một lý do khác tại sao tôi chỉ tò mò nếu nó có thể. Đó là cách tôi đã xem câu hỏi này.
—
Caleb Mauer