我正在使用用c#编写的.NET库。目前我正在IronPython中运行一个过程来调用一个过程来创建一个这样的对象:
foo = bar.ProcessAndCreateFoo() # bar is a Bar object
ProcessAndCreateFoo()
日志显示该方法在创建Foo对象时失败; IronPython控制台显示消息“'FooExtended'不可调用”。类Foo
和FooExtended
,后者是前者的子类,在类Bar
内定义,如下所示:
namespace ns.pc
{
public class Bar
{
public class Foo
{
public Foo (Object o)
{
}
}
public class FooExtended : Foo
{
public FooExtended (Object o)
{
}
}
public Foo ProcessAndCreateFoo()
{
// ...
Foo foo = new FooExtended(o);
return foo;
}
}
}
从c#调用ProcessAndCreateFoo()
方法不会引起任何错误,只能来自IronPython。如何让IronPython代码执行该功能?如果有的话,要对库进行哪些更正?
答案 0 :(得分:0)
尝试将每个类移动到自己的外层...只要在同一个命名空间中,并且您已将它们公开,您仍然可以创建它们......例如
namespace ns.pc
{
public class Bar
{
public Foo ProcessAndCreateFoo()
{
// ...
Foo foo = new FooExtended(o);
return foo;
}
}
public class Foo
{
public Foo (Object o)
{}
}
public class FooExtended : Foo
{
public FooExtended (Object o)
{}
}
}
现在,我已经把原来的Foo和FooExtended分开了,因为它完全合法,真正将一个类扩展到另一个类,具有更多选项/功能等等。但是,你真正想要的是重载Richnau提供的foo对象的创建。
答案 1 :(得分:0)
尝试在Foo中添加无参数构造函数。
public class Foo
{
public Foo (Object o)
{
}
protected Foo()
{
}
}