2013-08-12 2 views
0

Возможно ли сделать следующий код действительным на C# без изменения моего пространства имен или имени типа. Мне интересно, есть ли трюк или ключевое слово вокруг этой проблемы?Пространство имен и тип конфликта конфликтов

namespace NS 
{ 
    public class Foo { } 
} 

namespace NS.Foo 
{ 
    public class Bar { } 
} 

Ошибка, которую я получаю, это «пространство имен« NS »уже содержит определение для« Foo ».

+4

Не делайте этого: http://blogs.msdn.com/b/ericlippert/archive/2010/03/09/do-not-name-a-class-the-same-as-its-namespace -part-one.aspx – jason

+0

Wwwwwww, нет, вы не хотите этого делать. Это будет раздражать вас и всех, кто использует эту кодовую базу, в кратчайшие сроки. –

+0

@Jason: ваша ссылка относится к классу, который является тем же именем, что и его пространство с * охватывающим * (то есть, класс 'NS.NS' или' NS.Foo.Foo'), что не совпадает с сценарием в вопрос - это пространство имен и класс на том же уровне иерархии с тем же именем. –

ответ

0

По существу, нет. Даже если вы каким-то образом разрешите непосредственную двусмысленность, эта проблема идет полным ходом: что произойдет, если вы объявите свойство Foo с именем Bar?

Переименовать один из ваших Foo s.

0

Нет - нет никакого способа неоднозначности из NS.Fooв пространстве имен и NS.Fooкласса. не

4

Нет - Представьте себе, что подкласс в Foo под названием Bar:

namespace NS 
{ 
    public class Foo { public class Bar {} } 
} 

namespace NS.Foo 
{ 
    public class Bar { } 
} 

Как вы можете когда-либо сказать разницу, если один делает: new NS.Foo.Bar()?