タイトルが完全に自明ではない場合、これが私を困惑させるコードです:
public interface IFoo<T>
{
}
public class MyClass : IFoo<MyClass.NestedInMyClass>
{
private class NestedInMyClass
{
}
}
私はこれがエラーなしでコンパイルされることに驚いています。private
タイプを公開しているような気がします。これは違法ではないでしょうか?
たぶんあなたの答えは単に「それに対する規則はないのに、なぜそれは大丈夫ではないのか」ということになるでしょう。MyClass.NestedInMyClass
おそらく、それが「範囲」にあることも同様に驚くべきことです。資格を削除するMyClass.
と、コンパイルされません。
IFoo<>
(ジェネリッククラスに変更し、それがの基本クラスになるMyClass
場合、これは違法です。基本型は、少なくとも型自体と同じくらいアクセス可能でなければならないからです。)
Visual Studio 2010のC#4コンパイラでこれを試しました。