VB.NET Shared Keyword

Use the Shared modifier to specify that a member is not part of a type instance.

Shared. A Shared function is not part of an instance. Some functions and fields may be specific to an entire type, not an instance.Function

Modifier notes. The Shared modifier specifies that a function is meant for the entire type, not just a certain instance of it. Each instance has the same shared member.Keywords

An example. In the Widget class, we see a Public Shared Function and a Public Function. In Main, we can call Widget.Test() because Test() is a Shared function. No instance is required.Sub
However: We must instantiate Widget, with New Widget(), to call TestB(). The TestB() function is not Shared.
Info: Shared fields can be accessed by Shared Functions. Regular Functions can access both Shared fields and also regular fields.
Thus: This means that Shared functions have additional restrictions on what they can do.
VB.NET program that uses Shared function Module Module1 Class Widget Public Shared Function Test() As Integer ' Cannot access regular fields. Return Integer.Parse("1") End Function Dim _value As String = "2" Public Function TestB() As Integer ' Can access regular fields. Return Integer.Parse(_value) End Function End Class Sub Main() ' Use Shared Function. Console.WriteLine(Widget.Test()) ' Use Non-Shared Function. Dim w As Widget = New Widget() Console.WriteLine(w.TestB()) End Sub End Module Output 1 2

Shared field. Here we have a Shared field called "_index." When multiple IndexObject instances are created in Main, the index field is shared between them all.
VB.NET program that uses Shared field Module Module1 Class IndexObject Shared _index As Integer = 0 Public Sub Display() _index += 1 Console.WriteLine("INDEX: {0}", _index) End Sub End Class Sub Main() ' The index field is shared between objects. Dim test As IndexObject = New IndexObject() test.Display() Dim test2 As IndexObject = New IndexObject() test2.Display() End Sub End Module Output INDEX: 1 INDEX: 2

Performance. The .NET Framework's execution engine needs to evaluate instances before an instance function can be called. For this reason, Shared functions have a performance advantage.
Also: In many implementations, instance functions are passed a reference to the instance as the first argument.

A summary. We saw an example of a Shared function and a regular function. Shared members, often called static members, are part of the type, not part of the type's instances.

Final notes. You can determine whether a function should be shared based on whether it acts upon specific instances or not. Shared functions have advantages and disadvantages.

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