Поделиться через


CA1048: не объявляйте виртуальные элементы в запечатанных типах

TypeName

DoNotDeclareVirtualMembersInSealedTypes

CheckId

CA1048

Категория

Microsoft.Design

Критическое изменение

Критическое изменение

Причина

Открытый тип является запечатанным и объявляет метод, обладающий свойством virtual (Overridable в Visual Basic) и не являющийся окончательным. Это правило не касается нарушений типов делегатов, в которых такой шаблон обязателен.

Описание правила

Типы объявляют методы как виртуальные, чтобы наследующие типы могли переопределять реализацию виртуального метода. По определению невозможно наследовать от запечатанного типа, поэтому объявлять виртуальные метода в запечатанном типе не имеет смысла.

Компиляторы Visual Basic .NET и C# запрещают нарушение этого правила типами.

Устранение нарушений

Чтобы устранить нарушение этого правила, сделайте метод невиртуальным или сделайте тип ненаследуемым.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует. Если оставить тип в текущем состоянии, могут возникнуть проблемы обслуживания, а никаких преимуществ это не даст.

Пример

В следующем примере показан тип, который нарушает данное правило.

using namespace System;

namespace DesignLibrary
{                        
    public ref class SomeType sealed
    {
    public:
        virtual bool VirtualFunction() { return true; }
    };
}