2009-06-05 35 views
11

Tôi có một phương pháp được gọi là FormattedJoin() trong một lớp tiện ích được gọi là ArrayUtil. Tôi đã thử đổi tên FormattedJoin() thành chỉ Join() vì hành vi của nó tương tự như số string.Join() của .NET. Do đó, tôi thấy có ý nghĩa khi sử dụng cùng một tên. Tuy nhiên, khi tôi cố gắng sử dụng Visual Studio để đổi tên phương pháp này, tôi nhận được cảnh báo này:Tại sao Visual Studio nói với tôi rằng tôi có "trình biên dịch tạo tham chiếu" khi tôi cố gắng đổi tên một phương thức?

This member may have compiler generated references
with the same name. Refactoring the member will not
update these references, which may introduce semantic
changes and/or build errors into your code.

tôi có thể đổi tên phương pháp tốt và nó không gây build lỗi hoặc cảnh báo trình biên dịch. Có an toàn để làm điều này hay tôi nên tránh có một phương pháp với tên này?

Sau khi nhìn thấy lỗi này, tôi đã mở Reflector để xem liệu tôi có thể tìm hiểu xem .NET có nội bộ "ArrayUtil.Join()" hoặc bất kỳ biến thể nào và không giống như vậy. Ngay cả khi có phương thức "ArrayUtil.Join()", sẽ không có một không gian tên khác làm cho vấn đề này không thành vấn đề?

Trả lời

15

Điều này phải làm với LINQ.

Trình biên dịch C# sẽ tạo cuộc gọi đến phương thức có tên Tham gia khi bạn sử dụng từ khóa "Tham gia" trong truy vấn LINQ. Thông thường cuộc gọi được giải quyết với một trong các phương pháp mở rộng LINQ. Nếu bạn định nghĩa phương thức của riêng mình với cùng một ký hiệu như các phương thức LINQ, trình biên dịch sẽ sử dụng phương thức của bạn. Mục đích của cảnh báo là để cho bạn biết rằng nếu bạn thực hiện tái cấu trúc bổ sung thì trình biên dịch tạo ra các cuộc gọi phương thức sẽ không bị sửa đổi.

Trừ khi bạn đang cố viết một nhà cung cấp LINQ tùy chỉnh, bạn có thể bỏ qua lỗi này một cách an toàn.

+3

Ồ, lỗi đó không làm rõ điều đó! Cảm ơn vì đã cho tôi biết chuyện gì đang xảy ra. Tôi nghĩ tôi đã làm điều gì đó thật tệ ... –

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