Почему C # не требует ни пространства имен, ни полного пространства имен (полное имя)? - PullRequest
2 голосов
/ 16 февраля 2011

Я всегда думал об этом, но никогда не понимал, почему.

Простой пример:

public IEnumerator<Effect> GetEnumerator ( )
{
    return this.Effects.GetEnumerator ( );
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( )
{
    return this.GetEnumerator ( );
}

Почему вы должны указать:

System.Collections.IEnumerator

но не просто:

Collections.IEnumerator

Я не говорю, что это лучше, но мне кажется, что это пошаговый подход к решению столкновений.

Потому что иногда существуют довольно глубоко вложенные типы, поэтому необходимость набирать полное имя из-за коллизии нехорошо, вместо простого префикса типа с непосредственным пространством имен, которое его содержит, чтобы компилятор мог попытаться найти его в текущемимпортированные / используемые пространства имен.

Кроме того, когда я впервые запускал C #, я всегда обнаруживал, что делаю это, думая, что так оно и будет работать.Было бы здорово увидеть, как другие люди ведут себя свежо в C #, никогда раньше не использовав концепций пространства имен.

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

Я думаю, что Фу Бах пытался сказать это:

using Collections = System.Collections;

Обратите внимание, что правильное место для этого находится внутри пространства имен и вне класса, например:

namespace MyNamespace
{
    using SysCollections = System.Collections;

    public class MyClass
    {
        SysCollections.ArrayList mySampleField;
    }
}

Я имел в виду использовать SysCollections, чтобы показать, что для этого псевдонима нет ограничений.

Также обратите внимание, что using System - это именно то, что вам нужно, используя System.

.

Итак, это работает, и это то, что большинство людей будут делать:

using System;

namespace MyNamespace
{
    public class MyClass
    {
        Collections.ArrayList mySampleField;
    }
}
2 голосов
/ 16 февраля 2011

запись

using System.Collections;

Тогда вы можете написать краткую форму Collections.IEnumerator

1 голос
/ 16 февраля 2011

Поскольку нет такой вещи как using System.*;

Это сработало бы:

namespace System
{

   /*System.*/Collections.IEnumerator GetEnumerator ( )
   {
       return this.GetEnumerator ( );
   }


}

Но вам не следует ничего добавлять к System слегка.

...