Giải pháp phổ biến là gọi một phương thức tĩnh thuộc loại có thể tính toán giá trị của tham số được truyền cho hàm tạo cơ sở.
Ví dụ:
public B(int x, int y)
: base(x, y, CalculateZ(x, y))
{
}
// You can make this parameterless if it does not depend on X and Y
private static int CalculateZ(int x, int y)
{
//Calculate it here.
int exampleZ = x + y;
return exampleZ;
}
Do lưu ý rằng CalculateZ
không thể là một phương pháp dụ, bởi vì this
tham chiếu là không có sẵn trong initializers constructor.
Từ initializers Constructor ngôn ngữ đặc tả 10.11.1:
Một ví dụ nhà xây dựng initializer không thể truy cập dụ là tạo. Do đó, đây là lỗi biên dịch để tham chiếu này trong biểu thức đối số của trình khởi tạo hàm khởi dựng , vì nó là một lỗi biên dịch đối số tham chiếu để tham chiếu đến bất kỳ cá thể đơn giản nào .
EDIT: Đã thay đổi 'mẫu' thành 'tĩnh' trong mô tả.
gì? là 'B: A'? Nếu vậy, A có thể có * nhiều * dữ liệu hơn B như thế nào? Ngoài ra, A dường như không có một nhà xây dựng như vậy ... – Kobi
Bạn có nghĩa là lớp công khai B: A {trong ví dụ của bạn? –
Đã chỉnh sửa bài đăng gốc. Có, B: A –