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


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

Обновлен: Ноябрь 2007

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()          
        {          
        }      
    } 
}