== Why is this an issue? There's no point in having a ``++public++`` member in a non-``++public++`` type because objects that can't access the type will never have the chance to access the member. This rule raises an issue when a type has methods, fields, or inner types with higher visibility than the type itself has. === Noncompliant code example [source,csharp] ---- internal class MyClass { public static decimal PI = 3.14m; // Noncompliant public int GetOne() // Noncompliant { return 1; } protected record NestedType // Noncompliant: outer class is internal { public bool FlipCoin() // Noncompliant: outer class is internal { return false; } // ... } } ---- === Compliant solution [source,csharp] ---- public class MyClass // Class visibility upgrade makes members compliant { public static decimal PI = 3.14m; public int GetOne() { return 1; } protected record NestedType { public bool FlipCoin() // Outer type is public { return false; } // ... } } ---- === Exceptions User defined operators need to be public: [source,csharp] ---- public static implicit operator byte(MyClass a) => 1; // Compliant public static explicit operator MyClass(byte a) => new MyClass(a); // Compliant ---- Nested types, even if private, can be used and inherited in the parent type. In this case, the visibility of the outer type is considered. [source,csharp] ---- internal class MyClass { private class NestedClass { public int PublicProperty { get; } // Noncompliant: should be internal protected internal int ProtectedInternalProperty { get; } // Compliant: can be used in `InternalsVisibleTo` assemblies internal int InternalProperty { get; } // Compliant: can be used in `InternalsVisibleTo` assemblies protected int ProtectedProperty { get; } // Compliant: can be used in derived type private protected int PrivateProtectedProperty { get; } // Compliant: can be used in derived type private int PrivateProperty { get; } } } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::../message.adoc[] ''' == Comments And Links (visible only on this page) include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]