1. Computing & Technology

Discuss in my forum

MustInherit and NotInheritable in VB.NET

Putting It All Together

By , About.com Guide

On the previous pages, the 'how' and 'why' of both MustInherit and NotInheritable were explained. In the application "WorkInAmerica" below, an example of both are combined in a single program. Here's the code:

 Public Structure WorkHours
    Dim IWorked As Decimal
    Dim myBossWorked As Decimal
 End Structure
 Public Class WorkInAmerica
    Private Sub ADaysWork_Click( _
       ByVal sender As System.Object, _
       ByVal e As System.EventArgs) _
       Handles ADaysWork.Click
       Dim myJob As New Worker
       Dim myBoss As New Boss
       Dim theHours As New WorkHours
       theHours.IWorked = 0
       theHours.myBossWorked = 0
       ' The workday ....
       myJob.doWork(8, theHours)
       myBoss.doWork(8, theHours)
       Console.WriteLine("I worked: " & _
          theHours.IWorked)
       Console.WriteLine("My boss worked: " & _
          theHours.myBossWorked)
    End Sub
 End Class
 Public MustInherit Class Employee
    MustOverride Sub doWork( _
       ByVal hours As Decimal, _
       ByRef theHours As WorkHours)
 End Class
 Public NotInheritable Class Worker
    Inherits Employee
    Public Overrides Sub doWork( _
       ByVal hours As Decimal, _
       ByRef thehours As WorkHours)
       thehours.IWorked += hours
    End Sub
 End Class
 Public NotInheritable Class Boss
    Inherits Employee
    Public Overrides Sub doWork( _
       ByVal hours As Decimal, _
       ByRef thehours As WorkHours)
       thehours.myBossWorked += (hours / 2)
       thehours.IWorked += (hours / 2)
    End Sub
 End Class 

Both the worker and the boss have assigned workdays of eight hours:

 myJob.doWork(8, theHours)
 myBoss.doWork(8, theHours) 

But the output is:

 I worked: 12
 My boss worked: 4 

The class Employee is marked MustInherit and the doWork method is marked MustOverride so both the Boss class and the Worker class are required to have their own separate doWork procedures. The Boss class only does half the work and then adds the hours not worked to the Worker's hours. Finally, Boss class and the Worker class are both marked NotInheritable so no one can create a new class and change the way things work.

©2012 About.com. All rights reserved.

A part of The New York Times Company.