gpt4 book ai didi

ironpython - IronPython 类型的命名空间和程序集名称如何工作?

转载 作者:行者123 更新时间:2023-12-02 20:25:46 27 4
gpt4 key购买 nike

有一个名为“Entities”的 IronPython 包。该包包含一个“Entity.py”文件,该文件定义了“Customer”类和“Address”类。

如果我运行这个程序:

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");

我该怎么做?有没有办法指定命名空间和程序集名称?

谢谢

最佳答案

您想要查看clrtype这是 IronPython 2.6 中的新增功能。它使您能够控制发出的类型,并且有一些很好的示例以及预烘焙的解决方案,其中之一可能适用于此。

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

关于ironpython - IronPython 类型的命名空间和程序集名称如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com