1

我不想用 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 中实现这种功能呢?还是我做错了?

先感谢您!

4

1 回答 1

0

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

class TestConsumer(Consumes[TestMessage].All):

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

class TestConsumer(Consumes.All[TestMessage]):

同样可行的是All显式导入接口并使用它看起来像一个独立的通用接口:

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

如果这种行为是正确/以这种方式定义的,或者类型生成中是否存在错误(“inhert”-typo 除外)或泛型参数的定义/绑定方式,这似乎并不明显。似乎也可以接受两次绑定参数:

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

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

class PyTestConsumer(Consumes[List[String]].All[String]):
于 2013-05-05T14:41:29.603 回答