2010-04-29 5 views
4

Если у вас есть новый проект (ProjNew), где я хочу поместить несколько классов, которые находятся в другом проекте (ProjOld).Неоднозначное имя класса

Проблема заключается в том, что я хочу сохранить старые классы, отмеченные как «Устаревшие», чтобы избежать запуска всех моих проектов и проверить, используют ли они их.

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

Есть ли способ сказать в устаревшей какой сборке использовать в случае двусмысленности?

ответ

0

Все ваши классы с System.ObsoleteAttribute

http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx

using System; 

class Program 
{ 
    static void Main() 
    { 
     MethodA(); 
    } 

    [Obsolete("Use MethodB instead")] 
    static void MethodA() 
    { 
    } 

    static void MethodB() 
    { 
    } 
} 
+0

Имеет ли этот адрес OPs, чтобы иметь 2 класса с тем же именем? Может ли класс быть отмечен как устаревший, имея еще один класс с тем же именем, который используется в одном и том же пространстве имен? (по его мнению, ваш пример демонстрирует маркировку члена класса как устаревшего, а не самого класса) –

1

Вы можете создать классы, как partial classes и пометить методы, которые вы должны быть устаревшими.

Это позволит вам разделить классы на несколько файлов и по-прежнему использовать одно и то же имя класса.

+1

Частичные классы не пересекают границы сборки. –

+0

Ах! Я этого не осознавал, но это имеет смысл. Приветствия за голову Эрика. –

2

Я не уверен, что полностью понимаю ваш вопрос, но это может помочь. Вы можете использовать директиву Using, чтобы уточнить, какой класс использовать. Пример: с использованием ClassA = OldAssembly.ClassA;

Любые ссылки на ClassA будут ссылаться на OldAssembly.

0

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

Благодаря

4

Это не совсем понятно, что вы просите, но я дам ему попробовать в любом случае.

Предположим, у вас есть две библиотеки DLL, old.dll и new.dll, оба из которых имеют пространства имен N с типом C. Вы можете сделать это:

csc /r:NEW=new.dll /r:OLD=old.dll foo.cs 

, а затем в foo.cs вы можете говорят

extern alias NEW; 
extern alias OLD; 
class D : NEW::N.C { } 
class E : OLD::N.C { } 

и D наследуют от NC в new.dll, E унаследует от NC в old.dll.

Это решение проблемы?

Смежные вопросы