Я видел много ответов на typedef
проблема в C#, который я использовал, таким образом, я имею:
using Foo = System.Collections.Generic.Queue<Bar>;
и это работает хорошо. Я могу измениться, определение (особенно изменяют Панель => Зоопарк и т.д.), и все, что использует изменения Foo. Большой.
Теперь я хочу, чтобы это работало:
using Foo = System.Collections.Generic.Queue<Bar>;
using FooMap = System.Collections.Generic.Dictionary<char, Foo>;
но C#, кажется, не нравится Foo
во второй строке, даже при том, что я определил его в первом.
Существует ли способ использовать существующий псевдоним в качестве части другого?
Править: Я использую VS2008
Согласно стандарту, похоже, ответ отрицательный. Из Раздел 16.3.1 , параграф 6:
1 Порядок, в котором записываются using-alias-directives, не имеет значения, и разрешение {{ 1}} namespace-or-type-name, на которое ссылается директива using alias, не зависит от самой директивы using alias или других директив using в , непосредственно содержащем модуль компиляции или тело пространства имен.
2 Другими словами, имя-пространства-имен или-типа директивы-псевдонима разрешается как , если непосредственно содержащий единица компиляции или тело пространства имен не имели директив использования.
Редактировать:
Я только что заметил, что версия по указанной выше ссылке немного устарела. Текст из соответствующего параграфа в 4-м издании более подробен, но по-прежнему запрещает ссылки с использованием псевдонимов внутри других. Он также содержит пример, который делает это явным.
В зависимости от ваших потребностей в области видимости и силы набора текста вам может сойти с рук что-то вроде:
class Foo : System.Collections.Generic.Queue<Bar>
{
}