Компилятор не может найти class Foo
в namespace Foo
, где вы пытаетесь наследовать новый класс. Вы должны полностью определить имя, это не то, что вы не можете пропустить или не делать, если:
namespace Foo
{
using Too;
public class Boo : Foo // now is ok, compiler will look into `Too` too
{
}
}
Без using
или полностью определенного компилятора имен даже не заглядывает в namespace Too
. Попробуйте использовать любой тип, например List<T>
без указания его полностью или без using System.Collections.Generic
в методах, та же проблема, вы получите ошибку
Не удалось найти тип или имя пространства имен 'Foo' (отсутствует директива using или ссылка на сборку?)
Что касается ошибки:
CS0118 'Foo' является пространством имен, но используется как тип
Вы получаете это, потому что компилятор находится в области видимости (если я могу так сказать) Foo
, который является пространством имен и который вы не должны использовать в качестве базового типа.
@ РенеВогт сформулировал вопрос лучше:
почему компилятор не реализован таким образом, чтобы это могло работать
За ответом мы должны спросить разработчиков. Но в моем понимании это не было бы огромным достижением и стоило бы усилий для достижения этого. Лично я не вижу проблемы с указанием компилятору, где именно искать.
Подумайте об этом случае:
namespace Foo
{
public class Foo { }
public class Boo : Foo { }
public class BooToo : Foo { } // here I want Too.Foo, how?
}
Даже если компилятор изучит namespace Too
, у вас все равно будет конфликт.