Как подавить предупреждение компилятора для конкретной функции в VS2005 (VB.Net) - PullRequest
6 голосов
/ 07 ноября 2008

У меня есть класс, который наследует от базового класса и реализует следующее ...

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

Теперь базовый класс, от которого он наследует, также реализует этот System.IComparable.CompareTo, поэтому я получаю следующее предупреждение компилятора:

Предупреждение: 'System.IComparable.CompareTo' уже реализован базовым классом. Предполагается повторная реализация функции.

Я согласен с этим, поэтому мой вопрос заключается в том, как я могу отключить это предупреждение только для этой функции (т.е. не для всех таких предупреждений).

Пояснения:

  • Вот ссылка на ошибку в MSDN.
  • Я уже пробовал и тени, и переопределения, и ни одно из них не устраняет предупреждение.
  • Предупреждение относится не к самому методу (если только не опущены тени или переопределения), а к конкретному «Реализует System.IComparable.CompareTo».
  • Я не собираюсь подавлять все предупреждения этого типа (если они появляются), только это.

Решение:
Я надеялся использовать атрибут System.Diagnostics.CodeAnalysis.SuppressMessage или что-то вроде #pragma в C #, но похоже, что нет способа подавить предупреждение для одной строки. Существует способ отключить это сообщение для этого проекта, не отключая все предупреждения.

Я вручную отредактировал файл .vbproj и включил 42015 в узел для отладки и выпуска компиляций. Не идеально, но лучше, чем всегда видеть предупреждение в IDE.

Если у кого-то есть лучшее решение, добавьте его, и я с удовольствием попробую пометить ответ.

Ответы [ 6 ]

9 голосов
/ 24 февраля 2010

Используйте только «Инструменты» в базовом классе:

Подпись в базовом классе:

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

Подпись в унаследованном классе:

Public Overrides Function CompareTo(ByVal obj As Object) As Integer
1 голос
/ 20 ноября 2008

Вы можете использовать предупреждения подавления только для подавления одного предупреждения. Смотрите здесь Подробнее о том, как. Вы также можете использовать атрибут SuppressMessage .

0 голосов
/ 13 июня 2013

Если у вас нет доступа к базовому классу и, следовательно, вы не можете сделать метод Overrideable, вы можете добавить <NoWarn>42015</NoWarn> в файл проекта.

0 голосов
/ 07 ноября 2008

Вместо того, чтобы подавлять предупреждение, разве вы не должны его исправить? Предполагая, что база переопределена,

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

Если нет, тогда затените,

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

(Я думаю, это правильно, я программист на C #. Если нет, пожалуйста, прокомментируйте и я обновлю.)

0 голосов
/ 07 ноября 2008

Добавьте ключевое слово Shadows в определение функции.

Public Shadows Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
0 голосов
/ 07 ноября 2008

В свойствах вашего проекта перейдите на вкладку сборки и используйте текстовое поле подавления предупреждений.

...