1

我正在使用用 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 代码执行该函数?如果有的话,需要对图书馆进行哪些更正?

4

2 回答 2

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 对象的创建。

于 2012-11-22T13:43:09.173 回答
0

尝试在 Foo 中添加无参数构造函数。

public class Foo
{
    public Foo (Object o) 
    {
    }

    protected Foo()
    {

    }
}
于 2012-11-22T13:44:19.727 回答