首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VB.NET:如何引用VB.NET模块?

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

Stack Overflow用户
提问于 2009-01-12 19:13:35
回答 4查看 62.2K关注 0票数 20

我得到了一个Utility模块,因为VB.NET没有像C#那样的静态类,模块是VB.NET中的静态类,我使用模块的原因是因为我使用的是扩展方法,它只能在模块中使用。

我不能引用这个模块,但是如果我把我的代码放在一个类中。我可以毫不费力地参考它。可能的原因是什么?我想C#了。

编辑:模块在调用Utility的类库中。

EN

回答 4

Stack Overflow用户

发布于 2009-01-12 19:45:55

您需要将该模块标记为公共模块。

票数 55
EN

Stack Overflow用户

发布于 2009-01-13 07:12:53

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

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

VB.NET中,该模块之所以存在,是因为继承自Visual BASIC,部分继承自Microsoft BASIC。

VB.NET编译器将接受以下内容

代码语言:javascript
复制
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

并将其转换成这样(为简洁起见,省略了代码)

代码语言:javascript
复制
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#中,等效项是

代码语言:javascript
复制
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 basic6程序员对微软对该语言的更改感到非常恼火的主要原因。例如,关键字Integer发出Int32而不是Int16。

只要模块声明为公共模块,模块就会向引用原始程序集的其他程序集公开。

票数 8
EN

Stack Overflow用户

发布于 2009-01-12 19:19:14

也许方法/subs不是公开的?我曾经遇到过这样的问题,它会允许访问你的类中的本地代码,但如果它在你的类之外并标记为"Private“,就不允许访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/436605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档