2013-05-02 46 views
7

Whithin tiểu học của tôi, tôi nên tham khảo một phương pháp không được bảo vệ được thừa kế là this.Method() hoặc base.Method()?này. so với base. cho các phương pháp không được bảo vệ được thừa kế?

Sử dụng this sẽ cho phép tôi dễ dàng ẩn phương thức bằng một phương thức mới có cùng tên. Có nên gọi cho phương thức chỉ định rõ ràng base chỉ khi chắc chắn rằng chỉ cần triển khai thực hiện lớp cơ sở cụ thể?

+1

bạn nên luôn gọi hàm này. Phương thức() khi gọi và thực hiện cơ sở :: Phương thức() gọi từ bên trong các phương thức ghi đè được triển khai trong lớp dẫn xuất. Bằng cách đó trong tương lai khi bạn ghi đè lên một cái gì đó bạn không phải đi xung quanh làm một base.Method(); –

+0

Nó không phải là một phương pháp ảo và không thể bị ghi đè. Các phương thức không phải ảo chỉ có thể được ẩn. – Monstieur

+2

Tại sao không chỉ đề cập đến nó như là 'Phương thức()'? Nếu 'this' ẩn nó bằng' Method() 'của nó thì nó sẽ được gọi. Nếu không, 'base.Method()' sẽ được gọi. Điều này đã được chọn là hành vi mặc định; có lẽ vì lý do tốt.^_^ – Corak

Trả lời

2

Gọi điện luôn sử dụng this.Method().

Nếu bạn ẩn phương thức, có thể bạn sẽ muốn gọi phương thức mới thay vì phương thức trong lớp cơ sở. Mặt khác, nếu bạn làm cho phương thức của lớp cơ sở ảo, có thể bạn sẽ muốn làm cho mã của bạn gọi nếu theo một cách đa hình.

Thật khó để dự đoán tương lai, nhưng những tình huống này có vẻ dễ xảy ra hơn.

7

Nếu bạn định thêm thành viên có tên Method vào lớp con của bạn và vẫn muốn gọi phương thức kế thừa, bạn nên sử dụng base.Method(). Thêm thành viên có tên Method vào các lớp học có nguồn gốc khác sẽ không thay đổi ý nghĩa của yêu cầu this.Method().