2016-11-13 15 views
5

Tôi đang sử dụng một lớp có nguồn gốc từ lớp UIElement khi viết chương trình UWP bằng C#, nơi tôi muốn bao gồm xử lý các điều khiển đầu vào như thao tác chuột và bàn phím. Bây giờ tôi thấy đã có các phương pháp ảo nói rằng OnSomeEvent() và rõ ràng tôi có thể ghi đè các phương thức này để phù hợp với quy trình xử lý của tôi hoặc tôi có thể tạo phương thức mới xử lý các sự kiện công khai được xác định trong lớp cơ sở và đăng ký chúng sự kiện trong hàm tạo. Tôi cho rằng hai phương pháp này đều hoạt động nhưng Tôi hy vọng sẽ biết cách nào là chuyên nghiệp hơn hoặc nhiều hơn để làm điều này, và tại sao. Ngoài ra nó sẽ giúp giải thích tại sao MS cung cấp hai cách này cùng một lúc.Tôi có nên tạo phương thức mới để xử lý sự kiện hoặc ghi đè phương thức cơ sở không?

Dưới đây là những sự kiện và phương pháp UIElement lớp https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples

và một đoạn trích dẫn

UIElement cung cấp một điểm khởi đầu cho việc bố trí các yếu tố đặc điểm, và cũng cho thấy nhiều phương pháp ảo mà có nguồn gốc lớp có thể ghi đè, có thể ảnh hưởng đến hành vi hiển thị bố cục của phần tử và các phần tử con của nó. Phần lớn hành vi đầu vào và tập trung cho các thành phần nói chung cũng được xác định trong lớp UIElement . Điều này bao gồm các sự kiện cho bàn phím, chuột và bút stylus, và các thuộc tính trạng thái có liên quan. Nhiều sự kiện trong số này là sự kiện được định tuyến, và nhiều sự kiện liên quan đến đầu vào có cả phiên bản định tuyến bọt sủi bọt cũng như phiên bản đường hầm của sự kiện. Các sự kiện được ghép nối này thường là các sự kiện quan tâm lớn nhất để kiểm soát các tác giả .

Trả lời

1

Trong lớp dẫn xuất, tôi thường ghi đè phương pháp hiện có.

Tại sao? Trình xử lý sự kiện kém tin cậy hơn phương thức ghi đè. Ví dụ, các lớp bên ngoài có thể xóa các trình xử lý sự kiện, nhưng chúng không thể thay đổi mã trong ghi đè. Bạn phải niêm phong lớp của riêng mình, hoặc phương pháp của bạn có thể bị ghi đè.

Một điểm cần lưu ý là: tôi có muốn thay đổi cách điều khiển hoạt động không? Tôi có phải kiểm soát thời điểm thực thi chính xác của mã không (giả sử trước mã của lớp cơ sở, sau hoặc thay vì)? Nếu vậy, bạn phải sử dụng ghi đè.

+0

Tại sao ghi đè quyền kiểm soát thời gian thực thi chính xác trong khi các sự kiện, như bạn có thể ngụ ý, phải không? –

+1

Bởi vì các sự kiện được xử lý bất cứ ai đăng ký trước, cộng với bạn không thể xử lý bất cứ điều gì trước khi xử lý sự kiện đá nó. Có lẽ 'UIElement' đã chạy một số mã mà bạn không muốn. Bạn có thể ngăn chặn điều đó khi bạn ghi đè phương thức. –

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