gpt4 book ai didi

vb.net - Vb.net 委托(delegate)是强类型的吗/为什么编译器接受这个 'loosely typed' 委托(delegate)?

转载 作者:行者123 更新时间:2023-12-02 04:47:16 27 4
gpt4 key购买 nike

我正在学习 VB.NET 中的委托(delegate),但对委托(delegate)类型感到困惑。在阅读有关委托(delegate)的内容时,我了解到委托(delegate)是一种数据类型,可以引用具有特定类型签名的方法。因此,与字符串可以引用字符的方式相同,委托(delegate)可以引用将整数作为输入并返回整数作为输出的方法(例如)。但在与委托(delegate)们的交流中,我发现事实并非如此。下面的代码编译并运行——即使我不遵守委托(delegate)签名中的“输入”。我很困惑。我错过了什么吗?

Public Delegate Function myDelegate(ByVal i As Integer) As Integer' int in, rtrn int

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim md As myDelegate 'should be of type int in, rtrn int
md = New myDelegate(AddressOf squared) 'allows assign to string in, string out
MsgBox(md("3"))
End Sub

Private Function squared(ByVal i As String) As String
Return i * i
End Function

最佳答案

是的,VB.NET 是一种强类型语言,委托(delegate)也是如此。但 VB.NET 继承了旧版本 VB 的许多包袱,例如隐式值转换。 VB.NET 编译器发出对 Microsoft.VisualBasic.Conversions.ToDouble 的调用来“修复”冲突的类型。

如果将 Option Strict On 放在 .vb 文件的顶部,那么您将看到预期的错误。

Option Strict restricts implicit data type conversions to only widening conversions. Widening conversions explicitly do not permit any data type conversions in which data loss may occur and any conversion between numeric types and strings. For more information about widening conversions, see the Widening Conversions section.

Reference

关于vb.net - Vb.net 委托(delegate)是强类型的吗/为什么编译器接受这个 'loosely typed' 委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507341/

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