Tôi hiểu rằng kế thừa phương thức tĩnh không được hỗ trợ trong C #. Tôi cũng đã đọc một số cuộc thảo luận (bao gồm cả ở đây) trong đó các nhà phát triển tuyên bố cần có chức năng này, mà câu trả lời điển hình là "nếu bạn cần kế thừa thành viên tĩnh, có một lỗ hổng trong thiết kế của bạn".
OK, cho rằng OOP không muốn tôi nghĩ về kế thừa tĩnh, tôi phải kết luận rằng nhu cầu rõ ràng của tôi đối với nó chỉ ra một lỗi trong thiết kế của tôi. Nhưng, tôi bị mắc kẹt. Tôi thực sự đánh giá cao một số trợ giúp giải quyết vấn đề này. Đây là thử thách ...
Tôi muốn tạo một lớp cơ sở trừu tượng (hãy gọi nó là Fruit) đóng gói một số mã khởi tạo phức tạp. Mã này không thể được đặt trong hàm tạo, vì một số mã sẽ dựa vào các lệnh gọi phương thức ảo.
Fruit sẽ được kế thừa bởi các lớp cụ thể khác (Apple, Orange), mỗi lớp phải hiển thị một phương thức nhà máy tiêu chuẩn CreateInstance () để tạo và khởi tạo một thể hiện.
Nếu việc kế thừa thành viên tĩnh là khả thi, tôi sẽ đặt phương thức gốc trong lớp cơ sở và sử dụng một lệnh gọi phương thức ảo đến lớp dẫn xuất để lấy kiểu mà từ đó một cá thể cụ thể phải được khởi tạo. Mã máy khách sẽ đơn giản gọi Apple.CreateInstance () để có được một phiên bản Apple được khởi tạo đầy đủ.
Nhưng rõ ràng điều này là không thể, vì vậy ai đó có thể vui lòng giải thích cách thiết kế của tôi cần thay đổi như thế nào để phù hợp với chức năng tương tự.