gpt4 book ai didi

VB.NET:如何引用 VB.NET 模块?

转载 作者:行者123 更新时间:2023-12-03 13:39:04 25 4
gpt4 key购买 nike

我从 VB.NET 获得了一个实用程序模块没有像 C# 这样的静态类,Module 是 VB.NET 中的静态类。我使用模块的原因是因为我使用的是扩展方法,它只能在模块中使用。

我不能引用这个模块,但是如果我把我的代码放在一个类中。我可以毫无问题地引用它。可能是什么原因?我错过了 C#。

编辑:该模块位于类库调用实用程序中。

最佳答案

.NET 编译器可以采用任何类型的语言语法并将其转换为 .NET 等效项。有时有一对一的对应关系,有时则没有。

通过使用 .NET Reflector你可以看到编译器真正在做什么。

VB.NET该模块的存在是因为继承自 Visual BASIC 和部分来自 Microsoft BASIC 的遗产。

VB.NET 编译器将采用这个

Public Module CoreModule
Dim R As New System.Random(CInt(Microsoft.VisualBasic.Timer))
Public Function D(ByVal Roll As Integer) As Integer
Return R.Next(0, Roll) + 1
End Function

Public Function _1D6() As Integer
Return D(6)
End Function

Public Function _2D6() As Integer
Return D(6) + D(6)
End Function

Public Function _3D6() As Integer
Return D(6) + D(6) + D(6)
End Function

Public Function _4D6() As Integer
Return D(6) + D(6) + D(6) + D(6)
End Function

Public Function CRLF() As String
Return Microsoft.VisualBasic.ControlChars.CrLf
End Function
End Module

并把它变成这个(为简洁起见省略代码)
Public NotInheritable Class CoreModule
' Methods
Shared Sub New()
Public Shared Function _1D6() As Integer
Public Shared Function _2D6() As Integer
Public Shared Function _3D6() As Integer
Public Shared Function _4D6() As Integer
Public Shared Function CRLF() As String
Public Shared Function D(ByVal Roll As Integer) As Integer

' Fields
Private Shared R As Random
End Class

在 C# 中,等价于这个
public sealed class CoreModule
{
// Fields
private static Random R;

// Methods
static CoreModule();
public static int _1D6();
public static int _2D6();
public static int _3D6();
public static int _4D6();
public static string CRLF();
public static int D(int Roll);
}

重要的是发出的 CIL正确地完成工作。

这种能力是为什么这么多老的 Visual BASIC 6 程序员对 MS 对语言的更改感到非常恼火的主要原因。例如关键字 Integer 发出 Int32 而不是 Int16。

只要模块被声明为公共(public),模块就会暴露给引用原始程序集的其他程序集。

关于VB.NET:如何引用 VB.NET 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/436605/

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