【发布时间】:2023-03-19 01:31:01
【问题描述】:
我有一些程序将Control 对象引用作为参数。
在我的整个项目中,我有一堆 Controls,它们具有不同的派生类型,例如 Button、TextBox、PictureBox、ListBox 等。
我正在调用该过程并正常传递引用:
Procedure(controlRef)
我更改了项目配置中的一些警告通知。我猜它正在将隐式转换通知从“无”更改为“警告”,导致在调用这些程序的任何地方都会出现类似于以下内容的警告:
“在将 'ByRef' 参数 'parControl' 的值复制回匹配的参数时,从 'Control' 到 'Button' 的隐式转换。”
这是有道理的,我正在执行隐式转换,但请稍等,我将 Button 传递给 Control 参数,而不是像上面所说的那样将 Control 传递给 Button ,我有点困惑这里发生了什么。
无论如何,我看看“显示潜在修复”并没有修复建议,只有“抑制”或“配置”选项,好吧。因此,我使用DirectCast(controlRef, Control) 进行了显式转换,以查看是否会删除隐式转换的警告,它确实如此,但它再次被冗余转换警告取代,这是有道理的。因此,我使用潜在的修复程序删除了强制转换,并且过程调用中的参数在其周围留下了括号并且没有更多警告。
Procedure((controlRef))
这里到底发生了什么?
【问题讨论】:
-
Procedure的签名是什么? -
Procedure(ByRef param As Control)。如果我删除ByRef我不会收到有关隐式转换的投诉,并且不需要围绕参数的括号。我只是想知道那些括号在做什么?