C # библиотека нескольких классов с общей проблемой базового класса / пространства имен - PullRequest
1 голос
/ 13 марта 2009

Я новичок в c # и пытаюсь выяснить, могу ли я создать несколько библиотек производных классов, каждая из которых представляет определенный элемент. Я назову две библиотеки классов ClassA и ClassB. Каждый класс будет совместно использовать BaseClass (пространство имен BaseNS).

Затем я создал приложение на c #, которое ссылается как на ClassA, так и на ClassB. Это вызвало ошибку, потому что они оба имеют один и тот же BaseClass. Нет проблем, я использовал «Псевдоним» на ссылку. Это работало нормально. Итак, у меня есть:

внешний псевдоним Class1Alias; внешний псевдоним Class2Alias; ...

Здесь я столкнулся с проблемой.

Я хочу сделать функцию, которая принимает BaseClass в качестве аргумента.
public void SetData (BaseClass bc) {} Не может сделать это, потому что BaseClass не определен из-за псевдонима. Так и должно быть: public void SetData (Class1Alias.BaseNameSpace.BaseClass bc) {}

Это работает, но теперь я хочу сделать следующее: ...

Class1Alias.Class1Space.Class1 c1 = new Class1Alias.Class1Space.Class1();
Class2Alias.Class2Space.Class2 c2 = new Class2Alias.Class2Space.Class2();

это работает

Class1Alias.BaseNameSpace.BaseClass bc = (Class1Alias.BaseNameSpace.BaseClass)c1;
SetData(bc);

это не

Class1Alias.BaseNameSpace.BaseClass bc = (Class1Alias.BaseNameSpace.BaseClass)c2;
SetData(bc);

Я попытался привести его к Class2Alias, который работает, но затем я не могу вызвать мою функцию SetData, потому что она хочет Class1Alias.

Есть ли способ обойти это?

Ответы [ 3 ]

2 голосов
/ 13 марта 2009

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

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

0 голосов
/ 13 марта 2009

Опции, которые приходят на ум:

  1. Объединение двух библиотек классов
  2. Переместите базовый класс (и любые другие общие интерфейсы / классы) в третью общую библиотеку классов, на которую они оба могут ссылаться
  3. Измените пространство имен, чтобы избежать конфликта имен базовых классов (если они на самом деле не одного и того же класса)
0 голосов
/ 13 марта 2009

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

Установите псевдоним ссылки на сборку в окне свойств конкретной сборки, на которую ссылаются. Присвойте ему что-то отличное от global. Затем вы можете ссылаться на тип в этой сборке с помощью чего-то вроде:

assemblyAlias::RootNamespace.OtherNamespace.Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...