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


CA1012: абстрактные типы не должны иметь конструкторы

TypeName

AbstractTypesShouldNotHaveConstructors

CheckId

CA1012

Категория

Microsoft.Design

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

Не критическое

Причина

Открытый тип является абстрактным и имеет открытый конструктор.

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

Конструкторы абстрактных типов могут быть вызваны только производными типами. Открытые конструкторы создают экземпляры типа. Невозможно создавать экземпляры абстрактного типа; абстрактный тип с открытым конструктором является недопустимым.

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

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

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

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

Пример

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

Imports System     

Namespace Samples

    ' Violates this rule      
    Public MustInherit Class Book 

        Public Sub New()          
        End Sub 

    End Class 

End Namespace 
using System;

namespace Samples  
{   
    // Violates this rule      
    public abstract class Book      
    {          
        public Book()          
        {          
        }      
    } 
}

В следующем примере данное нарушение устраняется путем изменения модификатора доступа к конструктору с public на protected.

Imports System     

Namespace Samples

    ' Violates this rule      
    Public MustInherit Class Book 

        Protected Sub New()          
        End Sub 

    End Class 

End Namespace 
using System;

namespace Samples  
{   
    // Violates this rule      
    public abstract class Book      
    {          
        protected Book()          
        {          
        }      
    } 
}