Tôi có thể đặt thuộc tính riêng tư thông qua phản ánh không?Có thể đặt thuộc tính riêng tư thông qua phản chiếu không?
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ử những điều sau đây và nó không hoạt động, nơi 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 việc nó ra.
Tôi biết điều này là muộn, nhưng tôi thấy cần thiết cho ý nghĩ này tôi sẽ chia sẻ 'lý do' 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 đã sử dụng phương thức Crystal Reports ExportToStream. Cách thức phương pháp này được viết, quyền truy cập vào bộ đệm trong của luồng không được phép. Để 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 '_exposable' riêng trong đối tượng luồng thành 'true', tôi có thể gửi trực tiếp bộ đệm bên trong, lưu phân bổ 100K + cho mỗi yêu cầu. – Ray
Tại sao? Giả sử bạn có các trình cài đặt riêng trên các thuộc tính Id của bạn trên tất cả đối tượng miền của bạn và bạn muốn triển khai các 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 sẽ muốn có thể đặt thuộc tính Id. – bounav
Một tình huống sử dụng khác: đặt các trường được tạo tự động như "ngày tạo" khi nhập dữ liệu. – ANeves