Tôi có một lớp con Bicycle
thừa kế từ Agent
. Các đại lý có một tài sản mà phụ thuộc vào xe đạp để xác định nó. Cụ thể, mô hình vật lý cho tác nhân cần được khởi tạo với các ràng buộc vận tốc và tăng tốc được xác định trên cơ sở từng xe đạp và sẽ khác với một loại tác nhân khác.Bắt buộc một lớp con để khởi tạo thuộc tính cha mẹ sau khi tính toán
Vấn đề tôi có là tôi không thể chuyển các tham số cần tính toán (vận tốc/gia tốc yêu cầu tính toán để vẽ chúng từ phân phối lý thuyết) cho điều này trong constructor base()
vì tất nhiên lớp con chưa được khởi tạo.
Tính toán được thực hiện một lần cho mỗi trường hợp xe đạp nhưng được sử dụng nhiều lần để một phương pháp tĩnh đơn giản sẽ không thực hiện công việc. Tôi chỉ có thể gọi một phương pháp protected
trong phụ huynh sau khi chúng được tính toán nhưng AFAIK không có cách nào để thực thi điều này ở trẻ em, hoặc đặc biệt hơn trong bất kỳ trẻ em nào trong tương lai mà tôi có thể không viết.
Vì vậy, ví dụ, tôi có thể:
public abstract class Agent
{
protected IPhysics PluginPhysics { get; set; }
protected Agent(...)
{
}
}
public class Bicycle : Agent
{
private double maxA;
public Bicycle(Object anotherParameter) : base(...)
{
maxA = ComputationOfMaxA();
this.PluginPhysics = new Physics(anotherParameter, maxA);
}
private static double ComputationOfMaxA()
{
...
}
...
}
hoặc tôi có thể:
public abstract class Agent
{
protected IPhysics PluginPhysics { get; private set; }
protected Agent(...)
{
}
protected void SetupPhysics(Physics physics)
{
this.PluginPhysics = physics;
}
}
public class Bicycle : Agent
{
private double maxA;
public Bicycle(Object anotherParameter) : base(...)
{
maxA = ComputationOfMaxA();
SetupPhysics(new Physics(anotherParameter,maxA));
}
private static double ComputationOfMaxA()
{
...
}
...
}
Tôi không muốn làm một trong những người như không có cách nào thời gian biên dịch để đảm bảo rằng đứa trẻ initialises PluginPhysics
mà tôi có thể nghĩ đến, và tôi muốn PluginPhysics
không thể thay đổi khi nó được khởi tạo. Tôi cũng không muốn có các phần của tham số cần phải đi vào Physics
bên ngoài lớp Bicycle
. Tôi đánh giá cao rằng tất cả những điều này có thể không đồng thời có thể.
Vì vậy, ngắn gọn tài liệu được viết mạnh hoặc một loạt kiểm tra null thời gian chạy trong lớp cha trước khi bất kỳ đối tượng lớp nào được gọi, có cách rõ ràng C# -ish cách tôi thiếu buộc một đứa trẻ để khởi tạo một trường lớp cha mẹ trước khi sử dụng nếu bạn không thể làm điều đó trong constructor?
Tôi đã chỉnh sửa mã của bạn một lần chạm để làm cho nó rõ ràng hơn, bạn dựa vào ComputationOfMaxA để hoàn thành trước khi bạn tạo đối tượng vật lý. –