【问题标题】:C# multiple class library with common base class/namespace problem具有常见基类/命名空间问题的 C# 多类库
【发布时间】:2009-03-13 18:29:46
【问题描述】:

我是 c# 的新手,我想知道是否可以创建多个派生类库,每个派生类库都代表一个特定的项目。我将调用这两个类库 ClassA 和 ClassB。每个类将共享一个 BaseClass(命名空间 BaseNS)。

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

外部别名 Class1Alias; 外部别名 Class2Alias; ...

这是我遇到问题的地方。

我想创建一个以 BaseClass 作为参数的函数。
公共无效 SetData(BaseClass bc) { } 不能这样做,因为 BaseClass 由于别名而没有定义。所以它必须是: 公共无效 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。

有没有办法解决这个问题?

【问题讨论】:

    标签: c# namespaces


    【解决方案1】:

    您的术语有些混乱。你提到“类库”的方式让我觉得你的意思只是“类”,但我不确定。例如,“类库”不能从基类“派生”。

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

    【讨论】:

    • 不,我的意思是“类库”。两个类库都有一个共享的基类。
    • 您是说在不同的类库中有两个,您想从同一个基类派生?如果是的话,这确实是可能的。指出两个具有完全相同名称但在不同库中定义的类可能会有所帮助是两个不同的类
    • 是的,我意识到这是我的问题。我曾希望能够转换为通用基类并使用它。
    • 是什么阻止您将“类库 A”的引用添加到“类库 B”并让“Class2Alias.Class2Space.Class2”直接从“Class1Alias.BaseNameSpace.BaseClass”派生?或者将 BaseClass 移到一个单独的类库中,由你已有的两个引用?
    • 我试过你最后的建议。我将基类移动到一个单独的类库中,并在派生类库中引用了它,现在它可以工作了。感谢您的帮助。
    【解决方案2】:

    我不确定我是否正确理解了这个问题。基类是存在于单个程序集中还是复制并粘贴在两个程序集中?如果它被复制和粘贴,则您无能为力,因为编译器将它们视为两个不同的类。

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

    assemblyAlias::RootNamespace.OtherNamespace.Class
    

    【讨论】:

    • 正确。我正在尝试为两个派生类库使用共享基类定义。我得出了同样的结论,这是不可能的。谢谢。
    【解决方案3】:

    想到的选项:

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

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 2013-01-15
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2010-11-21
      • 2011-05-29
      相关资源
      最近更新 更多