CA1012:抽象类型不应具有构造函数

类型名

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