Если заголовок не является полностью понятным, вот код, который меня озадачивает:
public interface IFoo<T>
{
}
public class MyClass : IFoo<MyClass.NestedInMyClass>
{
private class NestedInMyClass
{
}
}
Я удивляюсь, что это компиляция без ошибок. Похоже, я разоблачаю тип private. Разве это не должно быть незаконным?
Возможно, ваши ответы просто будут "Нет никакого правила против этого, так почему бы не так?" Возможно, это также удивительно, что MyClass.NestedInMyClass находится даже в "сфере действия". Если я удалю квалификацию MyClass., она не будет компилироваться.
(Если я изменил IFoo<> на общий класс, который затем должен стать базовым классом MyClass, это незаконно, поскольку базовый тип должен быть как минимум доступным, как сам тип.)
Я попробовал это с компилятором С# 4 Visual Studio 2010.