【问题标题】:What is a module in .NET?.NET 中的模块是什么?
【发布时间】:2009-03-14 10:20:23
【问题描述】:

什么是模块?模块、类和函数之间有什么区别?如何访问 C# 中的模块?

我问这个是因为我想在运行时计算仅某些特定函数的 IL 代码的校验和(不使用代码签名)。

【问题讨论】:

    标签: c# .net module


    【解决方案1】:

    模块是程序集中代码的逻辑集合。一个程序集中可以有多个模块,每个模块可以用不同的 .NET 语言编写(据我所知,VS 不支持创建多模块程序集)。

    程序集包含模块。 模块包含类。 类包含函数。

    是的,您可以在运行时通过反射访问程序集、模块、类、函数、属性、字段等。

    【讨论】:

    • 通常(并且您在 VS 中没有选项)程序集由单个模块组成。但是,使用命令行工具,您可以创建多个模块的程序集(其中一个将包含整个程序集的元数据)。对于允许单击一次增量下载可能很有用。
    • 但是一个模块可以跨多个程序集吗?
    【解决方案2】:

    作为其他答案的补充:

    MSDN 声明:“模块是没有程序集清单的 Microsoft 中间语言 (MSIL) 文件。”。

    通过使用程序集链接器 (al.exe) 实用程序生成程序集清单,可以将模块“链接”在一起。如果我没记错的话,CLR 可以为程序集加载单个模块,以便只加载必要的模块。

    编辑:找到了一个 better description 的 Netmodules 以及您想要它们的原因。

    SO 上还有另一个question 涉及校验和主题。答案提到使用 GetILAsByteArray 方法获取 IL。

    【讨论】:

      【解决方案3】:

      一个文件

      这就是模块。

      module: A single file containing content that can be executed by the VES
      

      (其中VES 是一个读取.NET 程序集并将其转换为机器代码的程序。)参见http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf Partition I 第16 页。

      --

      程序集是文件系统(模块)中文件的一致集合。见http://msdn.microsoft.com/en-us/library/zst29sk2(vs.71).aspx

      显然,类定义是在文件(模块)itelf 中定义的。

      【讨论】:

        【解决方案4】:

        还有一个与程序集和编译无关的VB“模块”语句,类似于C#静态类:

        https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/module-statement

        Module 语句定义了在其命名空间中可用的引用类型。模块(有时称为标准模块)类似于类,但有一些重要区别。每个模块只有一个实例,不需要创建或分配给变量。模块不支持继承或实现接口。请注意,模块不是类或结构意义上的类型——您不能将编程元素声明为具有模块的数据类型。

        您只能在命名空间级别使用模块。这意味着声明 模块的上下文必须是源文件或命名空间,并且不能是 类、结构、模块、接口、过程或块。你不能 将一个模块嵌套在另一个模块中,或者嵌套在任何类型中。更多 信息,请参阅声明上下文和默认访问级别。

        模块的生命周期与您的程序相同。因为它的成员 都是共享的,它们的生命周期也与程序的生命周期相同。

        模块默认为好友访问。您可以调整他们的访问级别 使用访问修饰符。有关详细信息,请参阅访问级别 Visual Basic。

        模块的所有成员都是隐式共享的。

        简而言之,VB 中的模块类似于 C# 静态类

        【讨论】:

        • 欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及它存在的原因,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.
        • 主要主题显然是致力于将“模块”作为一种组装,因此当文档中有很好的描述时,没有看到需要详细回答
        • 像你一样引用是完全有效的。这只是为了确保如果链接因任何原因而关闭,您的答案不会立即无效。感谢您的努力!
        猜你喜欢
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 2019-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-28
        相关资源
        最近更新 更多