使用ironpython实现通用父类的嵌套接口

时间:2013-05-03 06:12:12

标签: c# generics ironpython masstransit

我不想用IronPython实现以下C#/ .Net接口:

public static class Consumes<TMessage> where TMessage : class
{
   public interface All
   {
       void Consume(TMessage message);
   }
}

这是我到目前为止尝试的python代码:

class TestMessage(object):
     pass

class TestConsumer(Consumes[TestMessage].All):
     def Consume(self, message):
         pass

从此我得到以下例外:

  

TypeError:TestConsumer:不能从开放的通用实例化MassTransit.Consumes`1 + All [TMessage]中获取。仅支持关闭的实例化。

实现此接口的有效C#类定义如下所示:

public class TestConsumer : Consumes<TestMessage>.All
{
    public void Consume(TestMessage msg) { }
}

那么在IronPython中实现这种类型是不可能的?或者我做错了?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

看起来像将嵌套接口实现为

class TestConsumer(Consumes[TestMessage].All):

没有正确绑定类型参数TMessage,即使从语法中可以预期。 如果在末尾提供类型(“对于接口而不是周围的类”),它似乎按预期工作:

class TestConsumer(Consumes.All[TestMessage]):

还可以显式导入接口All并使用它看起来像一个独立的通用接口:

from MyLib.Consumes import All
class TestConsumer(All[TestMessage]):

如果这种行为是正确/定义的,或者如果type generation中存在错误(除了“inhert”-typo)或者通用参数的定义方式,这似乎不太明显/界。看起来也可以将参数绑定两次:

class PyTestConsumer(Consumes[String].All[String]):

即使使用不同的值,从.NET的角度来看也没有多大意义:

class PyTestConsumer(Consumes[List[String]].All[String]):