Title: VB Classes 2
1VB Classes - 2
2Creating an Array of Objects
Dim emps(2) As emp Dim i As Integer For i 0 To
emps.GetUpperBound(0) emps(i) New
emp() Next emps(0).Eid "e1" emps(0).Ename
"peter" emps(0).salary 5000
3Implementing a 1M Relationship With Object Array
Class Department
Public did As String Public dname As
String Public emps(2) As Employee
Class Employee
Public eid As String Public ename As
String Public salary As Double
4Code Example
Dim tempDep As New department()
tempDep.did "D1" tempDep.dname
"Accounting" tempDep.emps(0) New emp()
tempDep.emps(0).Eid "E1"
tempDep.emps(0).Ename "Peter"
MessageBox.Show(tempDep.emps(0).Ename)
5Implementing a 1M Relationship With ArrayList
Class Department
Public did As String Public dname As
String Public emps As New ArrayList
Class Employee
Public eid As String Public ename As
String Public salary As Currency
6Example
Public Class Dept Public did As String
Public dname As String Public emps As New
ArrayList Public Sub addemp(ByVal id As
String, ByVal name As String) Dim e As
New Emp e.eid id e.ename
name emps.Add(e) End Sub End
Class Public Class Emp Public eid As String
Public ename As String End Class
7Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load Dim test As New Dept
test.did "d1" test.dname
"MIS" test.addemp("e1", "peter")
test.addemp("e2", "paul")
MessageBox.Show(test.emps.Item(0).eid)
MessageBox.Show(test.emps.Item(1).eid)
8Problem with Using ArrayList to Model the Entity
on the Many Side of the Relationship
- ArrayList can store different types of objects.
- Because the property is a collection, user may
use collections Add method to add a object of
different type. - Test.Emps.Add(Other Type)
9Collection Class
- A collection class holds references for a series
of objects created from the same class. - Create a hidden Private collection to hold data.
- Create methods to simulate collections Add,
Count, Items,RemoveAt, etc. - Example
10Public Class Dept Public did As String
Public dname As String Public emps As New
depEmps End Class Public Class Emp Public eid
As String Public ename As String End
Class Public Class depEmps Private hiddenList
As New ArrayList Public Sub add(ByVal id As
String, ByVal name As String) Dim e As
New Emp e.eid id e.ename
name hiddenList.Add(e) End Sub
Public ReadOnly Property items() As ArrayList
Get items hiddenList
End Get End Property Public ReadOnly
Property count() Get count
hiddenList.Count End Get End
Property End Class
11Code Using the Collection Class
Dim test As New Dept test.did "d1"
test.dname "MIS" test.emps.add("e1",
"peter") test.emps.add("e2", "paul")
MessageBox.Show(test.emps.items(0).eid)
MessageBox.Show(test.emps.items(1).eid)
12What If We Only Allow Two Employees in Each Dept?
Public Sub add(ByVal id As String, ByVal name As
String) Dim e As New Emp
e.eid id e.ename name
Static eCount As Integer If eCOunt gt
1 Then MessageBox.Show("too
many") Else eCount
1 hiddenList.Add(e)
End If End Sub
13- How to implement the Remove method?
- How to implement the RemoveAt method?
14Nested Classes
- VB .Net lets you nest class definitions
- Class Outer
-
- Class Inner
-
- End Class
- End Class
- The inner class can be declared as
- Dim obj As New Outer.Inner
-
15Public Class Emp Public Eid As String
Public Ename As String Public salary As
Double Public dependents As New deps()
Public Class deps Private dcol As New
arraylist Public Sub add(ByVal did As
Integer, ByVal dname As String) Dim d
As New dep() d.depID did
d.depName dname dcol.Add(d)
End Sub Public ReadOnly Property items()
As ArrayList Get
items dcol End Get End
Property Public ReadOnly Property
count() Get count
dcol.Count End Get End
Property End Class End Class
16Public Class dep Public depID As Integer
Public depName As String End Class
Code using collection class
Dim test1 As New Emp() Dim test2 As dep
test1.dependents.add(1, "peter")
test1.dependents.add(2, "paul") Dim i As
Integer For i 1 To test1.dependents.coun
t MessageBox.Show(test1.dependents.ite
ms(i).depname) Next For Each
test2 In test1.dependents.items
MessageBox.Show(test2.depID.ToString
test2.depName) Next
17Store Objects in Storage
- Comma delimited file
- Database
- Serialization
18Classes and Files
- Two files with 1M relationship
- Dept.dat, and Emp.dat
- Create a Dept class to model the relationship.
- Create a form that
- Display department Ids in a listbox.
- Display selected department info and its
employees in textboxes.
19Serializing Classes
- Add a Serializable attribute
- ltSerializable()gt Public Class Dept
20ltSerializable()gt Public Class Dept Public did
As String Public dname As String Public
emps As New depEmps End Class ltSerializable()gt
Public Class Emp Public eid As String
Public ename As String End Class
21Imports System.IO Imports System.Runtime.Serializa
tion.Formatters.Binary Private Sub
Form9_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
Dim test As New Dept test.did "d1"
test.dname "MIS" test.emps.add("e1",
"peter") test.emps.add("e2", "paul")
Dim fs As New FileStream("c\testSerializing.tx
t", FileMode.Create) Dim bf As New
BinaryFormatter bf.Serialize(fs, test)
fs.Close() End Sub Private Sub
Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles
Button1.Click Dim fs As New
FileStream("c\testSerializing.txt",
FileMode.Open) Dim testS As New Dept
Dim bf As New BinaryFormatter testS
CType(bf.Deserialize(fs), Dept)
TextBox1.Text testS.did TextBox2.Text
testS.dname End Sub
22Inheritance
- The process in which a new class can be based on
an existing class, and will inherit that classs
interface and behaviors. The original class is
known as the base class, super class, or parent
class. The inherited class is called a subclass,
a derived class, or a child class.
23Inheritance Example
Public Class Emp Public Eid As String
Public Ename As String Public salary As
Double Public Function tax() As Double
tax salary 0.1 End Function End
Class Public Class secretary Inherits Emp
Public WordsPerMinute As Integer End Class
24Overriding
- When a property or method in the base class is
not adequate for a derived class, we can override
the base class property or method by writing one
with the same name in the derived class. - The property or method in the base class must be
declared with the Overridable keyword. - The overridden property or method must be
declared with the Overrides keyword. - Note Keywords Overridable and Overrides apply
only to property procedure (not properties
declared by public variables) or method.
25Overriding a Method
Public Class Emp Public Eid As String
Public Ename As String Public salary As
Double Public Overridable Function tax() As
Double tax salary 0.1 End
Function End Class Public Class secretary
Inherits Emp Public WordsPerMinute As
Integer Public Overrides Function tax() As
Double If salary gt 3000 Then
tax salary 0.1 Else tax
salary 0.05 End If End Function End
Class
26Overriding a Property
Public Class Emp Public Eid As String
Public Ename As String Private hiddenSal As
Double Public Overridable Property salary()
As Double Get salary
hiddenSal End Get Set(ByVal Value
As Double) hiddenSal Value
End Set End Property End Class
27Public Class secretary Inherits Emp
Private sal As Double Public WordsPerMinute
As Integer Public Overrides Property salary()
As Double Get salary sal
End Get Set(ByVal Value As Double)
If Value gt 5000 Then
sal 5000 Else sal
Value End If End Set End
Property End Class
28MyBase
- The MyBase keyword refers to the base class. It
is useful when you want to reference a field,
property, or method of the base class.
29Public Overridable Function tax() As Double
tax salary 0.1 End Function
Public Class secretary Inherits Emp
Public WordsPerMinute As Integer Public
Overrides Function tax() As Double If
salary gt 3000 Then tax salary
0.1 Else tax salary 0.05
End If End Function End Class
Public Overrides Function tax() As Double
If salary gt 3000 Then tax
MyBase.tax Else tax salary
0.05 End If End Function
Note With MyBase, we can reuse the code in the
base class.
30The Scope of Class Properties and Methods
- Public Available within its own class and to
client code and subclasses. No restriction on
access in the current or other projects. - Private Available only within its own class, not
accessible from a derived class. - Protected Available only within its own class
and derived subclasses, not available to client
code. - Friend Available within its own class and to
client code and subclasses, but only within the
current project.
31Abstract Classes (Virtual Classes)
- To prevent users from using your class as is and
instead force them to inherit from it, you can
create an abstract class. - An abstract class cannot be instantiated, but is
designed to be used only as a base class. An
abstract class is declared with the MustInherit
keyword - Public MustInherit Class Person
- Abstract classes may have methods that are
declared with the MustOverride keyword. Such
methods are not implemented in the abstract class
but must be implemented in any derived classes.
32Abstract Class Example
Public MustInherit Class clsEmp Public Eid As
String Public Ename As String Public
salary As Double MustOverride Function tax()
As Double End Class Public Class clsEmpSecretary
Inherits clsEmp Public Overrides Function
tax() As Double If salary gt 5000 Then
tax salary 0.1 Else
tax salary 0.1 End If End
Function End Class
33NonInheritable Classes (Sealed Classes)
- A class declared with the NotInheritable keyword
can be instantiated but cannot be subclassed - Public NotInheritable Class Emp
- Use NotInheritable when you want others to be
able to use your class but not base their own
classes on it.
34Base Class and Derived Class Constructors
- It is possible for both a base class and a
derived class to have constructors. When an
instance of the derived class is created, the
base class constructor is called first, and then
the derived class constructor is called.
35Comparing Object Variables with the Is Operator
- Multiple object variables can reference the same
object. To determine whether two object
variables reference the same object, use the Is
operator, not . - Dim emp1 as new emp()
- Dim emp2 as emp
- Emp2 emp1
- If emp2 Is emp1 Then
- Msgbox(Same object)
- End if
36Exception
- Exceptions signal errors or unexpected events
that occur while an application is running. - An error handler is a section of code that
intercepts and responds to exceptions.
37Structured Error Handling
Try result Val(TextBox1.Text) /
Val(TextBox2.Text) TextBox3.Text
result.ToString Catch except As
InvalidCastException
MessageBox.Show(except.Message) Catch
except As DivideByZeroException
MessageBox.Show(except.Message) Catch
except As Exception 'Handle
everything else MessageBox.Show(except
.Message) Finally
MessageBox.Show("I get exdecuted, no matter
what") End Try
38User-Defined Application Exceptions
- System.ApplicationException
- Throw
- Throw New ApplicationException("Test exception")
- Use Try block to catch the excaption
- Try
- Statements
- Catch err ApplicationException
- MessageBox.Show(err.Message)
- End Try
39Application Exception Example
Public Class emp Public SSN As String
Public Ename As String Public DateHired As
Date Private hiddenJobCode As Long Public
Property JobCode() Set(ByVal Value)
If Value lt 1 Or Value gt 4 Then
Throw New ApplicationException("Invalide
JobCode") Else
hiddenJobCode Value End If
End Set Get JobCode
hiddenJobCode End Get End
Property End Class
40Catch Application Exception
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles Button1.Click Dim myEmp As New
emp() Try myEmp.JobCode
TextBox1.Text MessageBox.Show(myEmp.Jo
bCode) Catch err As ApplicationException
MessageBox.Show(err.Message)
TextBox1.Focus() End Try End Sub
41User-Defined Exception Class
Public Class JobCodeException Inherits
System.ApplicationException Sub New(ByVal
strMessage As String) MyBase.New(strMessag
e) End Sub End Class
42Using User-Defined Exception in Class
Private hiddenJobCode As Long Public Property
JobCode() Set(ByVal Value) If
Value lt 1 Or Value gt 4 Then Throw
New JobCodeException("Invalide JobCode")
Else hiddenJobCode Value
End If End Set Get
JobCode hiddenJobCode End Get
43Using User-Defined Exception in Program
Dim myEmp As New Emp() Try
myEmp.Eid TextBox1.Text myEmp.Ename
TextBox2.Text myEmp.salary
CDbl(TextBox3.Text) myEmp.JobCode
TextBox4.Text Catch err As
JobCodeException MessageBox.Show(err.M
essage) TextBox4.Focus()
TextBox4.SelectAll() End Try