Từ bài viết Anders Hejsberg interview, "cách chúng tôi thực hiện phân giải quá tải trong C# khác với bất kỳ ngôn ngữ nào khác" Ai đó có thể cung cấp một số ví dụ với C# và Java?Độ phân giải quá tải C#?
Trả lời
gì Anders đã nhận được ở đây là đội ngũ thiết kế ban đầu được thiết kế một cách rõ ràng các thuật toán giải quyết tình trạng quá tải có một số thuộc tính mà làm việc độc đáo với kịch bản phiên bản, mặc dù những đặc tính dường như ngược hoặc khó hiểu khi bạn xem xét các kịch bản mà không versioning .
Có lẽ ví dụ phổ biến nhất là quy tắc trong C# rằng nếu bất kỳ phương thức nào trên lớp có nguồn gốc cao hơn là ứng viên thích hợp, nó sẽ tự động tốt hơn bất kỳ phương pháp nào trên lớp ít xuất phát, phương thức đã nhập có số chữ ký phù hợp hơn. Quy tắc này không phải là, theo hiểu biết của tôi, được tìm thấy bằng các ngôn ngữ khác có độ phân giải quá tải. Nó có vẻ phản trực giác; nếu có một phương thức phù hợp hơn, tại sao không chọn nó? Lý do là vì phương thức phù hợp hơn với chữ ký có thể đã được thêm vào trong phiên bản sau và do đó sẽ giới thiệu một lỗi "lớp cơ sở giòn".
Đối với những suy nghĩ thêm về cách ngôn ngữ khác nhau xử lý thất bại giòn lớp cơ sở, xem
http://blogs.msdn.com/b/ericlippert/archive/tags/brittle+base+classes/
và cho những suy nghĩ thêm về độ phân giải quá tải, xem
http://blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution/
bạn nhận được paged bất cứ khi nào tên của bạn được đề cập trong một câu hỏi để đảm bảo rằng nó được trả lời bất kể thời gian trong ngày;) – R0MANARMY
C++ tự động ẩn tất cả các chức năng có cùng tên, nếu một trong những được định nghĩa trong một lớp học có nguồn gốc. "sử dụng base :: functionname" khai báo (mà "unhides" tên một lần nữa), hiệu quả là tương tự. Nó không phải là chính xác như nhau, bởi vì trong C + + những tên ẩn sẽ không được xem xét ở tất cả, ngay cả khi không có quá tải trong nhiều hơn Nó cũng phục vụ cùng một prupose - các hàm mới trong các lớp cơ sở sẽ không được gọi là vô tình. –
Cách C# xử lý quá tải từ góc độ nội bộ là điều khác biệt.
hoàn chỉnh báo giá từ Anders:
Tôi đã luôn luôn được mô tả bản thân mình như một chàng trai thực dụng . Thật buồn cười, bởi vì phiên bản đã kết thúc là một trong các trụ cột của thiết kế ngôn ngữ của chúng tôi. Nó hiển thị cách bạn ghi đè các phương thức ảo trong C#. Ngoài ra, cách chúng tôi thực hiện độ phân giải quá tải trong C# khác với từ bất kỳ ngôn ngữ nào khác mà tôi biết, vì lý do tạo phiên bản. Bất cứ khi nào chúng tôi xem xét việc thiết kế một tính năng cụ thể, chúng tôi sẽ luôn kiểm tra chéo bằng phiên bản. Chúng tôi sẽ hỏi, "Phiên bản thay đổi như thế nào? Làm thế nào để chức năng này từ góc nhìn phiên bản?" Nó chỉ ra rằng hầu hết các thiết kế ngôn ngữ trước khi đã đưa ra rất ít nghĩ đến điều đó.
Vâng .... giải thích [câu hỏi khác] của anh ấy (http://stackoverflow.com/questions/2926470/c-language-design-pillars). – R0MANARMY
- 1. C# Tăng cường độ phân giải quá tải Phương thức
- 2. quá tải Generic độ phân giải
- 3. Độ phân giải quá tải nhóm phương pháp khác với độ phân giải quá tải cuộc gọi phương thức?
- 4. Null đen loại thông số độ phân giải quá tải
- 5. Độ phân giải quá tải chữ ký "Thủ công"
- 6. Độ phân giải quá tải nên chọn phương pháp riêng?
- 7. Độ phân giải xuất Dia quá nhỏ
- 8. C++ 11 constructor quá tải độ phân giải và initialiser_lists: clang ++ và g ++ không đồng ý
- 9. C++ chuẩn, quá tải độ phân giải chức năng/phù hợp với
- 10. Cách xử lý quá tải có độ phân giải hành vi bất ngờ
- 11. quá tải ảo chức năng cuộc gọi có độ phân giải
- 12. Rắc rối với const/không const độ phân giải quá tải
- 13. Tại sao độ phân giải quá tải bên dưới gọi hàm không phải mẫu?
- 14. phân công điều hành quá tải trong C++
- 15. Làm thế nào để cast chức năng miễn phí quá tải để giải quyết xung đột quá tải?
- 16. Phát hiện sự thay đổi độ phân giải C# WinForms
- 17. Cách nhận độ phân giải màn hình bằng C++?
- 18. Quá trình toán tử C++ quá tải
- 19. Đọc kích thước và độ phân giải của tệp tiff mà không cần tải nó trước
- 20. Độ phân giải thư viện với autoconf?
- 21. Độ phân giải gốc của màn hình
- 22. Bắt đầu quá trình chuyển đổi trước khi kích hoạt độ phân giải
- 23. C++: Toán tử quá tải =
- 24. C++ toán tử == quá tải
- 25. Bộ công cụ Java Độ phân giải màn hình độ phân giải
- 26. Tại sao độ phân giải quá tải của C# không hoạt động giữa Func <T,T> và Hành động <T>?
- 27. Lấy độ phân giải của hình ảnh jpeg bằng C# và Môi trường .NET?
- 28. Tìm kiếm mã Java thực hiện thuật toán phân giải quá tải của javac
- 29. C++ tăng chức năng quá tải mẫu
- 30. LINQ to SQL: Concurrency độ phân giải
tôi sẽ bắt đầu từ [Eric Lippert's] (http://blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution/) blog. Có 8 bài đăng được đánh dấu được gắn thẻ với ** độ phân giải quá tải **. – R0MANARMY
Tại sao bạn cần một ví dụ? Trong Java, bạn có thể dễ dàng thay thế một hàm trong một lớp con, trong C# bạn đánh dấu hàm là ảo, sau đó có thể ghi đè hàm đó. –
@ R0MANARMY: Đó là câu trả lời đúng cho câu hỏi này. Nếu bạn đăng nó như một câu trả lời, tôi sẽ upvote nó. –