次の方法で共有


抽象型にはコンストラクタを含めないでください

更新 : 2007 年 11 月

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