【发布时间】:2020-06-28 18:14:17
【问题描述】:
我已经声明了一个 OBJECT 类型的“变量”。我还声明了一个名为 TEST 的类,它有一个属性“name”。我的理解是,在语句 variable = New test() 中,编译器正在创建类 TEST 的新实例,并将该新创建实例的引用/内存地址存储在“变量”中。这个想法是对象类型的变量应该能够存储任何类型的数据或其引用。通过使用成员访问器运算符的逻辑,我应该能够使用“变量”访问属性“名称”。但我做不到。当对实例的引用存储在对象类型变量中时,有人可以解释为什么以及如何访问该属性吗?
Module Program
Sub Main()
Dim variable As Object
variable = New test()
Console.WriteLine("Value: {0} Type: {1}", variable, variable.GetType())
'Output is Type: Object_Data_Type.test --> Works
'However we cannot access the property name of the class TEST through "varibale"
Console.ReadLine()
End Sub
End Module
Public Class test
Public Property name As String
End Class
【问题讨论】:
-
连同提供的答案,建议尽可能避免使用基本的
Object类型。 -
不是你做不到。这是编译器不允许使用
Option Strict On。访问比引用更派生的类型的成员,例如在Object类型的引用上的Test类型的成员需要后期绑定,即在运行时才能确认它是有效的。有时需要后期绑定,但它们是非常例外的。基本上,在绝大多数情况下,没有充分的理由尝试做你正在做的事情,所以不要这样做。 -
你应该阅读一些关于早期和晚期绑定的知识。鉴于
Option Strict Off是 VB.NET 的默认值,所有开发人员都应该了解它们是什么以及为什么在所有情况下都应该立即转为Option Strict On并保留On,除非合法需要后期绑定。
标签: vb.net