Обновление:Это происходит, когда параметр анализа кода «Подавлять результаты сгенерированного кода (, управляемого только )» отключен, а для набора правил установлено значение «Правила Microsoft Basic Design Guideline Rules».
В 2013 -04 -26 Microsoft подтвердила, что это ошибка, но не будет исправлять ее ни в этой, ни в следующей версии Visual Studio.
Мы часто инициализируем обработчики событий с пустым делегатом, чтобы избежать необходимости проверки нулей. Например.:
public EventHandler SomeEvent = delegate {};
Однако с тех пор, как мы начали компилировать часть нашего кода в Visual Studio 2012 (RTM ), я заметил, что многие события в производных классах теперь вызывают CA1601 :Не скрывать методы базового класса предупреждений в анализе кода Visual Studio 2012.
Вот пример, который вызовет предупреждение:
using System;
using System.ComponentModel;
[assembly: CLSCompliant( true )]
namespace TestLibrary1
{
public abstract class Class1
{
public event PropertyChangedEventHandler PropertyChanged = delegate {};
}
public class Class2 : Class1
{
// this will cause a CA1061 warning
public event EventHandler SelectionCancelled = delegate { };
}
public class Class3 : Class1
{
// this will not cause a CA1061 warning
public event EventHandler SelectionCancelled;
}
}
Примечание. :В VS2012 предупреждение срабатывает при компиляции в.NET 4.5 или.NET 4.0. Тот же образец не вызывает предупреждение в VS2010.
Помимо соображений производительности, есть ли законные причины, по которым мы не должны инициализировать события с пустыми делегатами? По умолчанию предполагается, что это, вероятно, просто особенность анализа в Visual Studio 2012.
Вот результат анализа кода для тех, у кого еще нет доступа к VS2012:
CA1061 Do not hide base class methods Change or remove 'Class2.Class2()' because it hides a more specific base class method: 'Class1.Class1()'. TestLibrary1 Class1.cs 14
Приложение:Я обнаружил, что параметр «Подавлять результаты из сгенерированного кода» в анализе кода отключен.
Также,Я обнаружил, что это происходит, когда обработчик событий в базовом типе одновременно:
Возможно, актуально :Мы используем Visual Studio 2012 RTM, которая была установлена в -месте поверх кандидата на выпуск.