Với mã khách hàng như sau:A A Constructor có thể trả về SubClass không?
var obj = new Class1();
Có cách nào để thay đổi các nhà xây dựng của Class1 để nó sẽ thực sự trở lại một lớp con (hoặc một số thực hiện thay thế khác) để thay thế?
Tôi muốn obj nhận được một trong hai cách triển khai khác nhau, tùy thuộc vào một số điều kiện. Rõ ràng, tôi có thể thay đổi để sử dụng một nhà máy hoặc khuôn khổ DI, nhưng tôi muốn tránh thay đổi mã khách hàng, nếu có thể.
Tôi cho rằng câu trả lời là không, nhưng tôi tự hỏi nếu có một số cách thông minh để làm điều đó xảy ra.
Chúng tôi đang xem xét thêm tính năng "mở rộng mới", về cơ bản sẽ cho phép bạn tạo phương thức nhà máy tĩnh sẽ được gọi khi toán tử "mới" được sử dụng, giống như phương thức mở rộng được gọi khi "." toán tử được sử dụng. Nó sẽ là một đường cú pháp đẹp cho nhà máy. Nếu bạn có một kịch bản thực sự tuyệt vời mà kiểu mẫu này sẽ hữu ích, tôi rất muốn xem một ví dụ. –
@Eric: trong khi nó không phải là một ví dụ C# cụ thể, tôi đã đi qua một tình huống mà điều này sẽ hữu ích trong C + +. Tôi đang phát triển một thư viện đa nền tảng, và nó thực sự hữu ích cho một ABC nền tảng bất khả tri để có thể trả về một cá thể lớp nền tảng cụ thể có nguồn gốc từ constructor của nó. Tôi chắc chắn phải có những tình huống tương tự để được tìm thấy khi phát triển với C#. – Mac
@Eric Lippert - Tôi có một kịch bản thế giới thực dành cho bạn! http://blog.hackensplat.com/2010/09/construct-something-else-c.html – billpg