.net - VB.NET 可选参数如何工作 'Under the hood' ?它们是否符合 CLS?

标签 .net vb.net clr cil

假设我们有以下方法声明:

Public Function MyMethod(ByVal param1 As Integer, _
    Optional ByVal param2 As Integer = 0, _
    Optional ByVal param3 As Integer = 1) As Integer

    Return param1 + param2 + param3
End Function

VB.NET 如何使可选参数在 CLR 范围内工作?可选参数是否符合 CLS?

最佳答案

有趣的是,这是通过反射器获得的反编译的 C# 代码。

public int MyMethod(int param1, 
                   [Optional, DefaultParameterValue(0)] int param2, 
                   [Optional, DefaultParameterValue(1)] int param3)
{
    return ((param1 + param2) + param3);
}

请注意 Optional 和 DefaultParameterValue 属性。尝试将它们放在 C# 方法中。你会发现你仍然需要向方法传递值。然而在 VB 代码中,它变成了 Default!话虽如此,我个人从未在 VB 代码中使用过 Default。感觉就像一个黑客。方法重载对我有用。

但是,在处理 Excel Interop 时,默认确实有帮助,这在 C# 中直接使用开箱即用是一件很麻烦的事情。

关于.net - VB.NET 可选参数如何工作 'Under the hood' ?它们是否符合 CLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/104068/

相关文章:

.net - 使用 iText 7 添加元数据

c# - 将具有 C# 和 VB 的 ASP.NET 网站转换为 Web 应用程序

c# - 调试失败的 HTTPS WebRequest

vb.net - 如何使组框的文本变为粗体而不是其中包含的控件的文本?

wpf - VSTO Excel 插件中的独立 WPF 表单无法保持焦点

winforms - 如何从线程设置 ToolStripProgressBar 的值?

c# - 引发/生成空引用异常背后的CLR实现是什么?

c# - 在 C# 中使用 foreach 循环时的内存分配

c# - 访问在运行时创建的任何后台 worker

c# - 建议 Winforms 应用程序的任何错误记录工具,用于在远程数据库中写入错误