Trong C#, ta có phương thức TinhThanhTien() là phương thức chỉ có ở lớp con là lớp XeChoHang, lớp cha là lớp Xe thì không có phương thức này. Khi ở lớp DanhSach, muốn lớp XeChoHang lấy được phương thức TinhThanhTien() thì ép kiểu theo cách nào sau đây là đúng?
Đáp án đúng: C
Câu hỏi này kiểm tra kiến thức về ép kiểu (casting) trong C#, đặc biệt là ép kiểu giữa lớp cha và lớp con, và cách truy cập các phương thức chỉ có ở lớp con.
Phân tích các phương án:
- Phương án A: (Xe.XeChoHang).TinhThanhTien - Sai cú pháp. Cách này cố gắng truy cập một phương thức tĩnh của lớp XeChoHang thông qua lớp Xe, nhưng Xe không phải là một lớp tĩnh và cách truy cập này không đúng.
- Phương án B: ((Xe)XeChoHang).TinhThanhTien - Sai. Ở đây ta ép kiểu đối tượng XeChoHang về kiểu Xe, nhưng kiểu Xe không có phương thức TinhThanhTien(), nên không thể gọi phương thức này.
- Phương án C: ((XeChoHang)Xe).TinhThanhTien - Đúng. Giả sử có một đối tượng thuộc lớp Xe (lớp cha) và ta biết chắc chắn đối tượng này thực chất là một đối tượng thuộc lớp XeChoHang (lớp con), thì ta có thể ép kiểu đối tượng Xe này về kiểu XeChoHang. Sau khi ép kiểu thành công, ta có thể gọi phương thức TinhThanhTien() vì phương thức này chỉ có ở lớp XeChoHang.
- Phương án D: (XeChoHang.Xe).TinhThanhTien - Sai cú pháp và sai logic. Cách này giống như phương án A, cố gắng truy cập một cái gì đó tĩnh thông qua lớp XeChoHang, nhưng không hợp lệ.
Vậy, phương án C là phương án đúng nhất.