Использование двух статических классов с одинаковым именем в C # - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть DLL, которую я включил в мой проект C #. Давайте назовем это "one.dll" Эта DLL содержит статический класс с именем «staticclass»

У меня есть еще одна DLL, которую я также включил в тот же проект. Давайте назовем это "two.dll" Эта DLL также содержит статический класс с именем "staticclass"

Теперь, когда я включаю обе библиотеки DLL одновременно в свой проект и пытаюсь получить доступ к «staticclass», тогда, естественно, это дает ошибку. Есть ли способ, которым я могу изменить имя класса или дать ему какой-то псевдоним, скажем, «staticclass» в «one.dll» останется как есть, и я могу дать псевдоним «staticclassTwo», который находится в «два» .dll "

Обратите внимание, что у меня нет доступа к исходному кодеку "one.dll" и "two.dll"

Ответы [ 2 ]

8 голосов
/ 15 февраля 2012

(Я предполагаю, что оба класса также находятся в одном и том же пространстве имен. Если это не так, это просто - просто используйте простые директивы using для псевдонимов или полностью определенное имя в коде.)

Вы действительно можете дать псевдоним - внешний псевдоним .Фактически это добавляет «сборку» в качестве еще одного уровня дифференциации пространства имен.

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

У Энсона Хортона есть хорошее прохождение о том, как вы используете их на практике.

0 голосов
/ 15 февраля 2012

Вы можете сделать это, просто используя Псевдоним .

В вашем коде чуть ниже строки namespace ; используйте псевдоним , как указано ниже :

namespace ConsoleApp
{

    using ClassOne = Assembly.One.MyClass; /* your dll 1 class */
    using ClassTwo = Assembly.Two.MyClass; /* your dll 2 class */

    class Program
    {

        static void Main(string[] args)
        {

            ClassOne one = new ClassOne();
            // Do your stuff with ClassOne object

            ClassTwo two = new ClassTwo();
            // Do your stuff with ClassTwo object

        }
    }
}

Надеюсь, это поможет!

...