VB.NET Module Example

Use a module with the Module block. Members in a Module are shared.

Module. A Module is not a class. It is a container element, but is not an object. In a Module, all members are shared and have "Friend" accessibility. We cannot instantiate a Module—it serves mainly to organize code in a global, single place.

This example uses two modules. By default, the Sub Main is placed in a Module called "Module1." This is where control flow begins in a VB.NET program. I also introduce a second module, Module2.
Module2: This module has a field, _value, which is shared automatically (implicitly). So the field has only one instance.
Sub: In Module2 we see a Sub called Increment. This is by default "Friend." It can be easily accessed from Main.
Increment: When Increment is called, the field _value is changed. This change persists throughout uses of Increment.
Note: This demonstrates that the field is shared, even though it has no shared keyword.
VB.NET program that uses modules Module Module1 Sub Main() ' Use Module2. ' ... It does not need to be created. Module2.Increment() Module2.Increment() Module2.Increment() End Sub End Module Module Module2 Dim _value As Integer Sub Increment() ' The value is shared. Console.WriteLine(_value) ' Change the value. _value += 1 End Sub End Module Output 0 1 2

Error. We cannot instantiate an instance of a Module. There is no "New" Sub on it. A Module is not a type, but rather an organizational namespace for programs that is shared. It is another syntax form.
Caution: If you try to create a Module, you will get an error. Please consider adding a class to fix this problem.
Error: Module 'Module2' cannot be used as a type.

Discussion. A Module has many rules. For example, it cannot inherit from another module. And you cannot specify the shared keyword on any of its members (they are already shared). In general, modules are simple to use.

Summary. Modules are common in VB.NET programs. But more complex data structures are not built with many modules—rather they use classes as building blocks. A module is not object-oriented. It is an organizational, shared-data construct.Class

© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.