用C#'编写的类中的类不能从IronPython中调用

时间:2012-11-22 13:34:04

标签: c# .net object ironpython

我正在使用用c#编写的.NET库。目前我正在IronPython中运行一个过程来调用一个过程来创建一个这样的对象:

foo = bar.ProcessAndCreateFoo() # bar is a Bar object

ProcessAndCreateFoo()日志显示该方法在创建Foo对象时失败; IronPython控制台显示消息“'FooExtended'不可调用”。类FooFooExtended,后者是前者的子类,在类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代码执行该功能?如果有的话,要对库进行哪些更正?

2 个答案:

答案 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()
    {

    }
}