2012-03-08 20 views
9

Khi trọng phương pháp OnNavigatedTo trong một trang mà họ đặt dòng mã này bên trong:Mục đích của "base.OnNavigatedTo (e)" bên trong phương thức ghi đè OnNavigatedTo?

base.OnNavigatedTo(e); 

Tôi đã loại bỏ nó và đã không nhận thấy bất kỳ hành vi kỳ quặc. Dòng mã này là gì? Chúng ta có nên rời khỏi nó không? Hay điều này giống như một người giữ chỗ?

Tôi khá chắc chắn điều này không cụ thể với chính phương thức, vì tôi đã thấy điều này ở những nơi khác nhau. Tôi đoán là điều này gọi phương thức OnNavigatedTo mặc định từ lớp mà chúng ta đang kế thừa từ (trong trường hợp này là Trang). Sự tồn tại của nó không thực sự có ý nghĩa mặc dù, bởi vì nếu chúng ta muốn rằng tại sao ghi đè nó ở nơi đầu tiên? Ai đó có thể giải thích cách thức hoạt động này?

Trả lời

10

Nó không phải là cầu kỳ như Android (mà treo với SuperNotCalledException). Nhưng đây là trường hợp sử dụng để rời khỏi nó:

public class BasePage : PhoneApplicationPage 
    { 
     protected override OnNavigatedTo(....) 
    { 
     //some logic that should happen on all your pages (logging to console, etc.) 
    } 
    } 

    public class DetailsPage : BasePage 
    { 
     protected override OnNavigatedTo(....) 
    { 
    base.OnNavigatedTo(); //the basepage logging, etc. 
     //custom page logic (setup VM, querystring parameters, etc.) 
    } 

} 

Nói chung, tôi sẽ gọi nó. Nếu việc thực hiện các thay đổi PhoneApplicationPage và chức năng ảo đó có nhiều thay đổi trong đó, bạn không muốn bỏ lỡ;)

4

(Không dành riêng cho OnNavigatedTo): Đây là giới hạn của các phương thức OnXXX ảo (hoặc bất kỳ phương pháp ảo nào) - lớp dẫn xuất chính thức không biết nếu lớp cơ sở có bất kỳ chức năng không tầm thường nào. Kết quả là bạn phải đào sâu vào tài liệu (nếu có) hoặc dựa vào thử nghiệm để biết liệu bạn có nên gọi lớp cơ sở hay không. Nếu bạn cần sử dụng thư viện someones - phương thức gọi cơ sở là mặc định an toàn hơn.

Có nhiều cách tiếp cận khác nhau để giải quyết "tôi có cần gọi cơ sở triển khai phương pháp ảo" tùy thuộc vào ngữ cảnh khi bạn thiết kế thư viện của riêng mình hay không.

5

Bạn có thể kiểm tra những điều này trong phản xạ. Khung làm đó là công việc trong phương pháp InternalOnNavigatedTo, trong đó kêu gọi sự trống rỗng phương pháp OnNavigatedTo ảo:

bảo vệ virtual void OnNavigatedTo (NavigationEventArgs e) { }

Bạn có thể xóa dòng đó, nó không có chức năng, nhưng đây không phải là một quy tắc chung. Nếu bạn không biết các chức năng cơ bản là gì, hãy để các cuộc gọi ở đó.

Các vấn đề liên quan