2008-11-07 29 views
6

Tôi có một lớp kế thừa từ một lớp cơ sở và thực hiện những điều sau đây ...Làm thế nào để ngăn chặn biên dịch cảnh báo cho chức năng cụ thể trong VS2005 (VB.Net)

Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

Bây giờ lớp cơ sở nó được thừa hưởng từ cũng triển khai System.IComparable.CompareTo này vì vậy tôi nhận được cảnh báo trình biên dịch sau:

Cảnh báo: 'System.IComparable.CompareTo' đã được lớp cơ sở thực hiện. Thực hiện lại hàm giả định.

Tôi ổn với câu hỏi của mình là làm cách nào để ngăn chặn cảnh báo này chỉ cho chức năng này (tức là không phải tất cả các cảnh báo đó).

Làm rõ:

  • Đây là một link đến lỗi trên MSDN.
  • Tôi đã thử cả Bóng và Ghi đè và không loại bỏ cảnh báo.
  • Cảnh báo không có trên chính phương thức đó (trừ khi Bóng tối hoặc Ghi đè bị bỏ qua), nhưng đúng hơn là trên "Triển khai System.IComparable.CompareTo" cụ thể.
  • Tôi không tìm cách chặn tất cả các cảnh báo thuộc loại này (nếu chúng bị cắt), chỉ là cái này.

Giải pháp:
Tôi đã hy vọng sử dụng thuộc tính System.Diagnostics.CodeAnalysis.SuppressMessage hoặc một cái gì đó giống như #pragma C# 's, nhưng hình như không có cách nào để ngăn chặn cảnh báo cho một dòng đơn. Tuy nhiên, có một cách để tắt thông báo này cho dự án này mà không cần tắt cảnh báo tất cả.

Tôi đã chỉnh sửa thủ công tệp .vbproj và bao gồm 42015 trong nút cho bộ sưu tập Debug và Release. Không lý tưởng nhưng tốt hơn là luôn thấy cảnh báo trong IDE.

Nếu ai đó có giải pháp tốt hơn, vui lòng thêm giải pháp đó và tôi sẵn sàng thử đánh dấu câu trả lời.

Trả lời

9

Chỉ sử dụng 'Dụng cụ' trong lớp cơ sở:

Chữ ký trong lớp cơ sở:

Public Overridable Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

Chữ ký trong lớp kế thừa:

Public Overrides Function CompareTo(ByVal obj As Object) As Integer 
+1

Đây là câu trả lời đúng duy nhất. Văn bản của cảnh báo ngụ ý điều này - đó là những gì "giả định" có nghĩa là, các Overrides một mình sẽ đảm bảo rằng phương thức đúng được gọi nếu cá thể là lớp kế thừa - nhưng nó không rõ ràng. – McKenzieG1

-1

Trên thuộc tính của dự án, hãy chuyển đến tab xây dựng và sử dụng hộp văn bản cảnh báo ngăn chặn.

+0

Tôi không tìm cách ngăn chặn tất cả cảnh báo cho dự án này, chỉ là dự án này. –

+0

Bạn sẽ không chặn tất cả tin nhắn vì bạn có thể chỉ định bằng các mã tin nhắn để chặn. Kiểm tra phản hồi của tôi xuống dưới đây. –

-1

Thêm từ khóa Shadows vào định nghĩa hàm.

Public Shadows Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 
+0

Đã thử cả Bóng và Ghi đè, không loại bỏ được cảnh báo. –

-1

Thay vì chặn cảnh báo, bạn có nên sửa chữa cảnh báo không? Giả sử rằng các cơ sở là Overridable,

Public Overrides Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

Nếu không, sau đó bóng nó,

Public Shadows Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 

(Tôi nghĩ rằng điều này là đúng, tôi là một C# lập trình viên. Nếu không, hãy bình luận và tôi sẽ cập nhật .)

+0

Đã thử cả Bóng và Ghi đè, không loại bỏ được cảnh báo. –

1

Bạn có thể sử dụng cảnh báo ngăn chặn chỉ để chặn một cảnh báo. Xem tại đây để biết more về cách thực hiện. Bạn cũng có thể sử dụng SuppressMessage Attribute.

0

Nếu bạn không có truy cập vào lớp cơ sở và do đó không thể thực hiện phương thức Overrideable, bạn có thể thêm <NoWarn>42015</NoWarn> vào tệp dự án.

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