![]() |
1
3
问题是Ironpython类不是.NET类。python类比c类更具动态性,因此Ironpython类通常是.NET对象。 当您在Ironpython中对.NET接口进行子类化时, 做 创建一个新的.NET类,但多个python类实际上共享一个backing.NET类(在Ironpython中,每个.NET类型子类只创建一个.NET类)。 正确的方法是使用python自省来收集Ironpython类对象,并在需要实例化它们的地方使用工厂函数(可以用作委托-将返回的实例强制转换到接口)。 例如,您可以尝试在python范围内执行:
|
![]() |
2
1
动态语言通常不使用接口,您以非常静态的方式思考:) 您不必担心它是否与某个预定义的接口匹配,只需调用成员函数并处理抛出的任何异常——无论如何,您都必须处理错误,只需使“不符合我们期望的方法调用”成为一个新的。在目标C中,这称为“非正式议定书”。 |
![]() |
3
1
始终可以通过调用clr.getclrType来获取python类型的backing.net类型。 getclrmodule(engine)返回clr模块,然后对其调用getclrType方法,并传入使用ObjectOperations获得的python类。这应该会给你一个system.type。之后,像通常那样使用getInterfaces方法。 |
![]() |
4
0
根据Ironpython常见问题解答,它不支持将*.py文件编译为可链接到以下对象的程序集: http://ironpython.codeplex.com/Wiki/View.aspx?title=FAQ&referringTitle=Home 但是Paul是正确的,如果您打算使用动态语言来实现这种扩展性,那么您可能希望使它像编辑文件一样简单,而不是必须从运行时了解接口。 如果要向系统管理员类型公开此扩展性点,您可能需要考虑托管PowerShell。不久前我写了一篇关于如何做到这一点的文章: http://notgartner.wordpress.com/2008/02/23/how-to-host-the-powershell-runtime/ PowerShell很适合这样做,因为它已经在使用Exchange的环境中得到了一些采用。注意-我是一个PowerShell的粉丝,所以带上一粒盐吧:) |