Это поведение компилятора C # - ошибка или особенность? - PullRequest
2 голосов
/ 02 апреля 2009

Почему следующий фрагмент кода действителен в C #? Это особенность компилятора или ошибка?

class A
{
    public class B : A
    {

    }
}

class C : A.B
{
    public void Foo(C.B b)
    {

    }
}

class D : A
{
    public void Foo(D.B.B.B.B b)
    {

    }
}

См. Также

.NET-вложенные классы

Ответы [ 4 ]

7 голосов
/ 02 апреля 2009

Это юридический код, но странный. Я могу найти в спецификации немного о разрешении имен, но это определенно законно. Я разговаривал на похожую тему с Эриком Липпертом раньше. Как ни странно, что использовал D.B.B.B.B ... тоже.

Разговор возник из-за этого более раннего вопроса .

Соответствующий раздел спецификации C # 3.0 - 3.8, но он слишком длинный и сложный, чтобы его можно было публиковать здесь.

4 голосов
/ 02 апреля 2009
  1. D - это A
  2. A имеет вложенный тип B
  3. B - это A
  4. GOTO 2
1 голос
/ 02 апреля 2009

Обратите внимание, что в руководствах по анализу кода указано, что вложенные типы не должны быть видны .

1 голос
/ 02 апреля 2009

Это довольно забавно. Хотя я не знаю, как это может быть вредно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...