C#多类库,具有公共基类/命名空间问题

时间:2009-03-13 18:29:47

标签: c# namespaces

我是c#的新手,我正在试图弄清楚我是否可以创建多个派生类库,每个类都代表一个特定的项目。我将这两个类库称为ClassA& ClassB的。每个类将共享一个BaseClass(名称空间BaseNS)。

然后我创建了一个引用ClassA和ClassB的c#应用程序。这会产生错误,因为它们都具有相同的BaseClass。没问题,我在参考上使用了'Alias'。这很好。所以我有:

extern alias Class1Alias; extern alias 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 个答案:

答案 0 :(得分:2)

你的术语有些令人困惑。你提到“类库”的方式让我认为你的意思只是“阶级”,但我不确定。例如,“类库”不能从基类“派生”。

你说你是C#的新手。还有其他您熟悉的语言吗?也许如果你能用这种语言来表达你想做的事情,也许有人可以把它翻译成C#。

答案 1 :(得分:0)

我不确定我是否正确理解了这个问题。基类是存在于单个程序集中还是复制并粘贴到两个程序集中?如果它被复制和粘贴,那么你可以做的并不多,因为编译器认为它们是两个不同的类。

在特定引用的程序集的属性窗口中设置程序集引用别名。为其分配global以外的内容。然后,您可以使用以下内容引用该程序集中的类型:

assemblyAlias::RootNamespace.OtherNamespace.Class

答案 2 :(得分:0)

浮现在脑海中的选项:

  1. 合并两个类库
  2. 将基类(以及任何其他共享接口/类)移动到可以引用的第三个通用类库中
  3. 更改命名空间以避免冲突基类名称(如果它们确实不是同一个类)