.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.
Я уверен, что это подходит или применимо только в том случае, если вы отделяетесь от нескольких сборок, но стоит знать, даже если это не так.