2012-11-22 4 views
1

C#으로 작성된 .NET 라이브러리를 사용하고 있습니다. 현재이 같은 객체 생성하기 위해 프로 시저를 호출하는 IronPython의에 프로 시저를 실행 해요 : IronPython에서 C#으로 작성된 클래스가 '호출 할 수 없습니다.'

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

ProcessAndCreateFoo() 로그

이 방법은 푸 객체를 생성하는 순간에 실패 쇼; IronPython 콘솔에 "FooExtended '를 호출 할 수 없다는 메시지가 표시됩니다.

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; 
     } 
    } 
} 

는 IronPython의에서 오류가 발생하지 않는 C#을에서 ProcessAndCreateFoo() 메서드를 호출 :이 여기에 표시된 것처럼 이전의 서브 클래스 인 후자 두 클래스 FooFooExtended는, 클래스 Bar 내부에 정의되어 있습니다 . IronPython 코드에서 함수를 실행할 수 있도록하려면 어떻게해야할까요? 도서관에 대한 수정 사항은 무엇입니까? 지금 같은

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) 
     {} 
    } 
} 

로 ... 당신은 여전히 ​​그들을 만들 수

답변

0

은 ... 한 같은 이름 공간에서 자신의 외부 수준으로 각 클래스를 옮겨보십시오, 당신은 이미 그들에게 대중이 나는 원래의 Foo를 FooExtended와 완전히 별개의 것으로, 한 클래스를 다른 클래스로 확장하여 더 많은 옵션/기능 등을 기준선에서 확장했습니다. 그러나 실제로 Richanau가 제공 한 것처럼 foo 객체의 생성을 과부하시키는 것이 무엇을 의미 할지도 모릅니다.

0

Foo에서 매개 변수없는 생성자를 추가해보십시오.

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

    protected Foo() 
    { 

    } 
} 
관련 문제