【发布时间】:2026-02-02 08:30:01
【问题描述】:
我有一个 C# 程序,它调用一个 COM DLL,它有一个名为 test 的方法,带有两个参数:第一个参数传递给 ByVal,第二个参数传递给 ByRef。
这就是 COM DLL 的作用:
Public Sub test(ByVal a As String, ByRef b As String)
a = "a"
b = "b"
End Sub
这就是 C# 程序的作用:
test.Class1 x = new test.Class1();
string a = "1";
string b = "2";
x.test(a, ref b);
我注意到,如果我删除 ref 关键字,编译器不会告诉我我错过了 ref 关键字并传递参数 ByVal。如果我错过了ref 关键字,这可能是一个大问题,因为在我知道它需要ref 之前我不会注意到它。你知道为什么编译器会出现这种行为吗?
【问题讨论】:
-
@MartinVerjans C# 项目中没有“Option Strict ON”
-
@HansPassant 我测试了没有 ref 关键字的程序,它不会改变字符串的值。因此,如果您不告诉他这样做,请传递字符串 ByVal 而不是 ByRef。
标签: c# vb6 com-interop byref byval