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