在我试图弄清楚如何使用Siemens Tia Portal Openness框架时,我尝试使用ControllerTarget
类型在我的Tia Portal项目中找到一个项目。
我试着找到这样的项目:
Imports Siemens.Engineering
Imports Siemens.Engineering.HW
Module Module1
Sub Main()
Dim myTiaPortal
myTiaPortal = New TiaPortal(TiaPortalMode.WithoutUserInterface)
'The portal is open, now create a project.
Dim tiaProject As Project
'Open the sample project:
Dim fileName As String
fileName = "C:\Path\To\Project\Sample_Project.ap13"
tiaProject = myTiaPortal.Projects.Open(fileName)
'Get the frist device from the project:
Dim tiaDevice As Device
tiaDevice = tiaProject.Devices.First
For Each item As IDeviceItem In tiaDevice.DeviceItems
Console.WriteLine(item.GetType())
Next
Console.ReadKey()
End Sub
End Module
这显示了项目中的两个项目:
Siemens.Engineering.HW.DeviceItemImplementation
Siemens.Engineering.HW.ControllerTargetImplementation
当我尝试定义ControllerTargetImplementation
类型的对象时,我收到此数据类型不存在的消息。
当我尝试将ControllerTargetImplementation
类型的项目转换为ControllerTarget
类型的对象时,这似乎完美无缺。
这是否意味着GetType()
返回的类型不必与对象的实际类型相同?这是正常的吗?或者这在开放平台上是一件奇怪的事情吗?
答案 0 :(得分:2)
当我尝试定义
ControllerTargetImplementation
类型的对象时,我收到此数据类型不存在的消息。
类型可以是程序集的内部,这意味着虽然它们存在,而GetType
之类的东西会显示它们,但是你不能直接使用它们。
当我尝试将
ControllerTargetImplementation
类型的项目转换为ControllerTarget
类型的对象时,这似乎完美无缺。
鉴于这里涉及的名称,它肯定听起来ControllerTarget
是向您(库的使用者)公开的类型,而该类型的实现,可能是接口的子类或实现(即是ControllerTarget
一个类或接口?)是隐藏的,因为你不需要知道它是如何工作的,也不会干扰它。
这是否意味着
GetType()
返回的类型不必与对象的实际类型相同?
对象的实际类型是GetType
报告的内容,但这并不意味着它必然是您所指的那样。例如,请考虑以下事项:
Class A
End Class
Class B
Inherits A
End Class
Sub Main
Dim obj as A = new B()
Console.WriteLine(obj.GetType())
End Sub
这会将obj
报告为B
类型(因为这是我们使用new B()
实例化的实际类型),即使它是针对{{1}类型的变量存储的}。