2009-12-26 135 views
3

有一个名为“Entities”的IronPython包。该软件包包含一个定义“客户”类和“地址”类的“Entity.py”文件。命名空间和程序集名称如何为IronPython类型工作?

如果我运行这个程序:

customer = Customer() 
print customer.GetType().AssemblyQualifiedName 
address = Address() 
print address.GetType().AssemblyQualifiedName 

我得到这样的输出:

IronPython.NewTypes.System.Object_1$1, Snippets.scripting, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 
IronPython.NewTypes.System.Object_1$1, Snippets.scripting, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 

是如何运作的?为什么两种类型都有相同的名称(Object_1$1)?

我必须使用需要组件限定名称才能创建该类型实例的API。我希望能够以这种方式使用它:

customer = aFactory.Create("Entities.Customer, Entities"); 

我该怎么做?有什么方法可以指定名称空间和程序集名称?

感谢

回答

5

你想看看clrtype这IronPython的2.6是新的。它使您能够控制排放的类型,并且有一些优秀的样品可以使用预先烘焙的解决方案,其中一种可能适用于此。

类型相同的原因是IronPython只需要在.NET类型系统上做很多事情。这包括覆盖基本类型上的所有虚拟方法,并通过将它们包含在您的基础列表中来实现您请求的任何接口。除此之外,所有类型都是相同的,它们通过动态查找到它们的PythonType对象来定义。因此,例如在Object_1 $ 1中,我们定义了一个覆盖“ToString”的覆盖,它将在当前的PythonType的解析顺序中查找ToString是否已被定义,如果是,我们调用它。这使对象的PythonType成员可以在运行时更改,甚至允许在运行时更改实际的python类型。此外,如果我们没有这样做,定义类会泄漏内存,因为.NET类型不可收集。

+0

@Dino:谢谢你的回答。我读了你提供的链接。它说:“IronPython网站上提供的ClrType示例显示了如何在__clrtype__钩子之上构建。”我无法找到该示例,Google也无法找到。你能寄给我那个样本的链接吗? – Sylvain 2009-12-27 21:44:27

+0

示例可在此处找到:http://ironpython.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12482#DownloadId=96609 – 2009-12-28 20:01:30

+0

@迪诺:谢谢,我会检查一下。 – Sylvain 2009-12-29 15:31:02

相关问题