Phương pháp thể hiện có ưu tiên hơn các phương pháp mở rộng. Quan sát của bạn là bằng chứng giống nhau.
Khi giải quyết phương thức cần gọi, phương thức này sẽ luôn chọn phương thức đối sánh phù hợp theo phương pháp tiện ích ... trực quan theo cách.
diễn giải từ C# trong chiều sâu,
Khi trình biên dịch thấy rằng bạn đang cố gắng để gọi một phương thức mà trông như một phương pháp dụ nhưng không thể để tìm một, nó sau đó tìm kiếm phương pháp mở rộng (có thể nhìn thấy dựa trên chỉ thị using
của bạn). Trong trường hợp nhiều thí sinh như các phương pháp khuyến nông mục tiêu, một với "chuyển đổi tốt hơn" tương tự như quá tải (ví dụ nếu IChild và Ibase cả hai đều có một phương pháp mở rộng tương tự định nghĩa .. IChild.ExtensionMethod là chọn)
Ngoài ra, trình ngắt mã ẩn có thể cho phép nói TypeA không có SecretMethod làm phương thức thể hiện trong Libv1.0. Vì vậy, bạn viết một phương pháp mở rộng SecretMethod. Nếu tác giả giới thiệu một phương thức thể hiện cùng tên và chữ ký trong v2.0 (có thông số this
), và bạn biên dịch lại nguồn của bạn bằng Libv2.0, tất cả các cuộc gọi hiện có đến phương thức mở rộng sẽ âm thầm bây giờ được chuyển đến phương thức thể hiện mới.
Có nhưng ít nhất không có phương pháp trực tiếp, chỉ một phương pháp yêu cầu một diễn viên tiềm ẩn. Vì vậy, tôi mong đợi nó sẽ tìm kiếm một phương pháp trực tiếp. –
"tất cả các cuộc gọi hiện có đến phương thức tiện ích mở rộng sẽ tự động được chuyển sang phương pháp thể hiện mới". - Lưu ý điều này chỉ tính khi biên dịch lại. Một cuộc gọi mở rộng chỉ được dịch một cách đơn giản thành một cuộc gọi phương thức tĩnh. – Dykam
Trình biên dịch sẽ cố gắng hết sức để đáp ứng yêu cầu giải pháp phương pháp với một phương thức thể hiện - bằng cách sử dụng chuyển đổi ngầm định nếu cần. Nó chỉ xem xét các phương thức mở rộng nếu nó không thể. Ngoài ra cố gắng phôi tiềm ẩn để tìm một phương pháp dụ là std. hành vi. ví dụ MyFunc ('A') sẽ phân giải thành tĩnh void MyFunc (int a) với = 65. Bạn có thể tránh tất cả điều này bằng cách chỉ định phương thức mở rộng của bạn thành tên không được lấy - nhưng bạn không bao giờ có thể chắc chắn, xem cuối cùng para. – Gishu