CA1034: Nested types should not be visible
A nested type is a type declared within the scope of another type. Nested types are useful for encapsulating private implementation details of the containing type. Used for this purpose, nested types should not be externally visible.
Do not use externally visible nested types for logical grouping or to avoid name collisions; instead, use namespaces.
Nested types include the notion of member accessibility, which some programmers do not understand clearly.
Protected types can be used in subclasses and nested types in advance customization scenarios.