CA1034: 入れ子にされた型を参照可能にすることはできません
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
分類 |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
外部から参照できる型に、外部から参照できる型宣言があります。入れ子にされた列挙およびプロテクト型には、この規則は適用されません。
規則の説明
入れ子にされた型とは、別の型のスコープ内で宣言された型のことです。入れ子にされた型は、含まれる型のプライベート実装の詳細をカプセル化するときに便利です。このような用途なので、入れ子にされた型は外部から参照できないようにします。
論理的なグループ化や、名前の衝突を回避する目的では、外部から参照できる入れ子にされた型を使用しないでください。代わりに、名前空間を使用します。
入れ子にされた型には、メンバーのアクセシビリティという概念が含まれますが、プログラマによっては、この概念を明確に理解していない場合もあります。
プロテクト型はサブクラスで使用でき、入れ子にされた型は高度なカスタマイズ シナリオで使用できます。
違反の修正方法
入れ子にされた型が外部から参照できなくてもよい場合は、型のアクセシビリティを変更します。または、入れ子にされた型を親の型から削除します。型を分類するために入れ子にした場合、入れ子にするのではなく、名前空間を使用して階層構造を作成します。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
この規則に違反する型を次の例に示します。
Imports System
Namespace DesignLibrary
Class ParentType
Public Class NestedType
Sub New()
End Sub
End Class
Sub New()
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
internal class ParentType
{
public class NestedType
{
public NestedType()
{
}
}
public ParentType()
{
NestedType nt = new NestedType();
}
}
}
using namespace System;
namespace DesignLibrary
{
public ref class ParentType
{
public:
ref class NestedType
{
public:
NestedType()
{
}
};
ParentType()
{
NestedType^ nt = gcnew NestedType();
}
};
}