我是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。
无论如何都可以解决这个问题吗?
答案 0 :(得分:2)
你的术语有些令人困惑。你提到“类库”的方式让我认为你的意思只是“阶级”,但我不确定。例如,“类库”不能从基类“派生”。
你说你是C#的新手。还有其他您熟悉的语言吗?也许如果你能用这种语言来表达你想做的事情,也许有人可以把它翻译成C#。
答案 1 :(得分:0)
我不确定我是否正确理解了这个问题。基类是存在于单个程序集中还是复制并粘贴到两个程序集中?如果它被复制和粘贴,那么你可以做的并不多,因为编译器认为它们是两个不同的类。
在特定引用的程序集的属性窗口中设置程序集引用别名。为其分配global
以外的内容。然后,您可以使用以下内容引用该程序集中的类型:
assemblyAlias::RootNamespace.OtherNamespace.Class
答案 2 :(得分:0)
浮现在脑海中的选项: