我不想用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中实现这种类型是不可能的?或者我做错了?
提前谢谢!
答案 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]):