You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中适配含in-struct参数的C#委托?

问题解决:VB.NET适配C#带in参数的委托

问题背景

C#中定义了如下结构体与委托:

struct Dummy {}
delegate int ReceiveDummy(in Dummy dummy);

在VB.NET中尝试用ByVal或ByRef定义函数并绑定到该委托时,会触发BC30657错误:“返回类型不受支持或参数类型不受支持”。

解决方案

要匹配C#in参数的语义,VB.NET需要使用**ReadOnly ByRef**声明函数参数——C#的in本质是只读的引用传递,而ReadOnly ByRef正好对应这一行为,既避免值类型拷贝,又限制参数在函数内不可修改。

正确的VB.NET代码实现如下:

Structure Dummy
End Structure

' 用ReadOnly ByRef匹配C#的in参数约束
Shared Function MyReceiveDummy(ReadOnly ByRef dummy As Dummy) As Integer
    ' 函数逻辑:dummy为只读,无法修改其内容
    Return 0
End Function

' 成功绑定委托
Dim receive As ReceiveDummy = New ReceiveDummy(AddressOf MyReceiveDummy)

关于VB.NET的in等效语法

VB.NET没有与C#in完全同名的关键字,但ReadOnly ByRef参数可以实现完全等效的语义:

  • 均以引用方式传递值类型,避免拷贝开销
  • 均对参数施加只读限制,函数内部无法修改参数内容

内容的提问来源于stack exchange,提问作者Sjoerd van Kreel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:50:58