【发布时间】:2018-06-13 11:50:20
【问题描述】:
我们有一个 C# 类,其中包含两个函数,其参数仅通过参数修饰符不同:
bool DoSomething(Object obj){};
bool DoSomething(ref Object obj){};
现在我们需要从 VB.NET 调用这个方法(实际上是其中任何一个)。问题是 VB.NET 编译器无法决定使用哪种方法。
问题是:有没有办法告诉编译器我们想要第一个变体(或第二个变体,这对调用者无关紧要)?
在 VB.NET 中将调用写为 DoSomething((myObj))(即添加括号)没有帮助。
【问题讨论】:
-
IMO 这似乎是一个糟糕的 API 设计。
-
评论跟踪。所以 C# 认为它是一个不同的函数签名,具有相同的返回类型和相同的参数数量和类型?看起来很奇怪,它不应该那样做......
-
我能想到的最好方法是 DoSomethingByRef(ref object)
-
我认为你不能直接这样做。这类似于试图区分名称仅在大小写上有所不同的两种方法。它不是所有语言都支持的功能,因此它被认为是不良形式并且不符合 CLS。例如,see this 和 this github issue。
标签: c# vb.net byref method-resolution-order byval