.NET Несколько пространств имен для одного класса

Возможно ли, чтобы один класс находился в двух пространствах имен и как я могу это сделать?

Чтобы уточнить: у нас есть библиотека классов (пусть, корневое пространство имен - classLib1), которое со временем выросло (больше классов), и я хочу логически группировать классы в разные пространства имен. Однако некоторые из старых классов необходимо сгруппировать в эти новые пространства имен (например, classLib1.section1), и это приведет к потере устаревшего кода в других сборках, которые используют эту библиотеку классов. Поэтому я хочу иметь возможность ссылаться на класс с использованием обоих пространств имен, пока мы не сможем ставить старые.

Я не могу найти никакой информации об этом, что предполагает, что есть причина, по которой люди не захотят этого делать!?!

Ответы

Ответ 1

Нет, нет возможности дать одно имя класса (пространство имен фактически является лишь частью имени класса).

В качестве обходного пути вы можете переместить классы в новое место и создать вокруг них тонкие обертки в старом расположении (шаблон фасада). Лучшим решением, конечно же, было бы перемещение классов и исправление устаревшего кода соответственно.

Ответ 2

Как работа вокруг, вы можете "использовать" класс во втором пространстве имен, когда вам это нужно:

namespace classLib1.section2
{
    public myBigClass
    {

и в каждом файле, который использует его в старом пространстве имен, вы можете добавить одну строку

namespace classLib1.section1
{
    using myBigClass = classLib1.section2.myBigClass;

в качестве временного патча, пока вы не исправили это правильно.

Ответ 3

Тип переадресации был введен в .net 2.0, что означает, что вы можете использовать TypeForwardedToAttribute, чтобы указать, что тип, который первоначально присутствовал в AssemblyX, теперь находится в AssemblyY.

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