2012-11-22 24 views
1

我正在使用用C#編寫的.NET庫。目前我正在運行在IronPython中的一個程序調用一個過程來創建這樣一個對象:用C#編寫的類中的類不可被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代碼執行該功能?如果有的話,對圖書館所做的更正是哪些?

回答

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對象的創建。

0

嘗試在Foo中添加無參數的構造函數。

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

    protected Foo() 
    { 

    } 
} 
相關問題