1

C# で記述された .NET ライブラリを使用しています。現在、IronPython でプロシージャを実行して、次のようなオブジェクトを作成するプロシージャを呼び出しています。

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

ログはProcessAndCreateFoo()、メソッドが Foo オブジェクトを作成した瞬間に失敗したことを示しています。IronPython コンソールに「'FooExtended' is not callable」というメッセージが表示されます。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 コードが関数を実行できるようにするにはどうすればよいですか? ライブラリに対して行うべき修正はどれですか?

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 a 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 に答える