什么是.NET中的模块?

时间:2009-03-14 10:20:23

标签: c# .net module

究竟是什么模块?模块,类和函数之间有什么区别?如何在C#中访问模块?

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

4 个答案:

答案 0 :(得分:52)

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

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

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

答案 1 :(得分:10)

作为其他答案的补充:

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

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

编辑:找到better description个网络模块以及你想要它们的原因。

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

答案 2 :(得分:5)

文件

这就是模块。

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分区I第16页。

-

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

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

答案 3 :(得分:1)

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

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

  

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

     

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

     

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

     

模块默认为朋友访问权限。您可以调整其访问级别   使用访问修饰符。有关更多信息,请参阅访问级别   Visual Basic。

     

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

简而言之,VB中的模块是C#静态类的模拟