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