Giả sử tôi có hai lớp:Cast cơ sở dụ để lớp có nguồn gốc (nhìn xuống) trong C#
class Employee
và
class AdvancedEmployee:Employee
Tôi biết một cái gì đó như thế này sẽ không hoạt động, như tôi không thể downcast trên C#:
var employee = new Employee();
var advanced = employee as AdvancedEmployee;
Câu hỏi của tôi là: Làm thế nào để thực hiện downcast một cách hiệu quả? Thực ra tôi có một hàm tạo trên AdvancedEmployee lấy một Employee làm tham số và sử dụng nó để tiêm các giá trị của nó, về cơ bản tạo một bản sao.
Cập nhật
Để giải quyết các dữ liệu đó sẽ được nhân đôi tôi đã thay đổi cách tiếp cận một chút và bây giờ AdvancedEmployee CHỨA một nhân viên chứ không phải là một chính nó. Ví dụ:
class Employee;
class AdvancedEmployee
{
private employee
public AdvancedEmployee(Employee employee){
this.employee = employee
}
}
Làm cho cả hai phù hợp với giao diện, IEmployee? – SpaceBison
Tôi không thể sửa đổi Nhân viên. –
@IsraelLot, bạn chắc chắn có thể downcast trong C#. Tôi nghi ngờ bạn chỉ thiếu cú pháp: 'AdvancedEmployee advanced = (AdvancedEmployee) nhân viên;' Tất nhiên điều này sẽ cung cấp cho một lỗi thời gian chạy nếu đối tượng tham chiếu không phải là trong thực tế một thể hiện của AdvancedEmployee. – Ben