Dojo 脚本中的多重继承#

Dojo 脚本中的多重继承#,dojo,script#,Dojo,Script#,我正在尝试创建一个脚本导入库来包装dojo工具包(部分)——特别是dijit小部件。不幸的是,dojo使用多重继承,而C#不支持这种继承(除了接口,脚本无法正确处理这些接口,请参见下文) 我正在努力完成这样的事情: [Imported] public class A { public void Foo() {} } [Imported] public class B { public void Bar() {} } [Imported] public class C : A, B {

我正在尝试创建一个脚本导入库来包装dojo工具包(部分)——特别是dijit小部件。不幸的是,dojo使用多重继承,而C#不支持这种继承(除了接口,脚本无法正确处理这些接口,请参见下文)

我正在努力完成这样的事情:

[Imported]
public class A
{
   public void Foo() {}
}
[Imported]
public class B
{
   public void Bar() {}
}
[Imported]
public class C : A, B
{
   public void Sproing() {}
}
[Imported]
public class A
{
   public void Foo() {}
}
[Imported]
public class B
{
   public void Bar() {}
}
[Imported]
public class C
{
   public void Foo() {}
   public void Bar() {}
   public void Sproing() {}
}
但很明显,这不是有效的C,因此不是有效的脚本

脚本中是否有一种方法可以容纳[Imported]类的多重继承?我尝试使用接口,因为C#支持接口的多重继承,而且我也不提供实现: [进口] 公共接口A { void Foo(); } [进口] 公共接口B { 空心钢筋(); } [进口] 公共接口C:A,B { 空位展开(); } 但是,当我试图从另一个脚本项目中使用库时,会出现如下代码:
cc=null;c、 Foo()我刚刚收到一条“检查您的C源代码是否已编译,以及您是否使用了不受支持的功能。检查的常见事项包括使用完全限定名(改用using语句导入名称空间)或从同一类型的静态成员访问某个类型的私有成员。”调用
C.Foo()
时出错

还有其他想法吗?[Mixin]属性似乎也不能满足我的需要

目前我看到的唯一其他选择(除了修复脚本#中的接口问题,我不准备这么做)是完全放弃继承,并将所有 每个叶类中的“继承”成员。看起来是这样的:

[Imported]
public class A
{
   public void Foo() {}
}
[Imported]
public class B
{
   public void Bar() {}
}
[Imported]
public class C : A, B
{
   public void Sproing() {}
}
[Imported]
public class A
{
   public void Foo() {}
}
[Imported]
public class B
{
   public void Bar() {}
}
[Imported]
public class C
{
   public void Foo() {}
   public void Bar() {}
   public void Sproing() {}
}

显然,这会很快变得难看,但我可以将其自动化。由于JavaScript的类型系统非常快速和松散,因此在那里甚至可以正常工作。在Script#land中,导入库的使用者只需做比他们应该做的更多的显式转换。还有其他我忽略的缺点吗?

目前不支持接口继承。它将在未来版本中修复

您可以定义:

interface A {
}
interface B {
}
class C : A, B {
}
这意味着您将不得不定义所有成员,即使存根是C


我没有深入研究过Dojo,但可能更好的策略是使用一个基类,在许多小部件之间共享方法,然后为每个小部件类型派生小部件类型。这将类似于脚本存储库中的jQueryUI内容。

很高兴知道我不仅仅是做错了。我最终可能会结合您的方法和我上面展示的版本。这似乎行得通,但我需要为它想出一些自动化的方法。另一方面,简单地增强脚本可能会减少工作量(而且更有回报)。你能告诉我脚本中的哪个类可能包含这个问题吗?如果你能把我带到正确的地方,我可以从那里出发。