vb classes - 2
DESCRIPTION
VB Classes - 2. ISYS 573. Creating 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. Implementing a 1:M Relationship With Object Array. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/1.jpg)
VB Classes - 2
ISYS 573
![Page 2: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/2.jpg)
Creating an Array of ObjectsDim emps(2) As empDim i As IntegerFor i = 0 To emps.GetUpperBound(0) emps(i) = New emp()Nextemps(0).Eid = "e1"emps(0).Ename = "peter"emps(0).salary = 5000
![Page 3: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/3.jpg)
Implementing a 1:M Relationship With Object Array
Public did As StringPublic dname As StringPublic emps(2) As Employee
Public eid As StringPublic ename As StringPublic salary As Double
Class Department
Class Employee
![Page 4: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/4.jpg)
Code 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)
![Page 5: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/5.jpg)
Implementing a 1:M Relationship With ArrayList
Public did As StringPublic dname As StringPublic emps As New ArrayList
Public eid As StringPublic ename As StringPublic salary As Currency
Class Department
Class Employee
![Page 6: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/6.jpg)
ExamplePublic 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 SubEnd ClassPublic Class Emp Public eid As String Public ename As StringEnd Class
![Page 7: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/7.jpg)
Private 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)
![Page 8: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/8.jpg)
Problem 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 collection’s Add method to add a object of different type.– Test.Emps.Add(“Other Type”)
![Page 9: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/9.jpg)
Collection 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 collection’s Add,
Count, Items,RemoveAt, … etc.• Example:
![Page 10: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/10.jpg)
Public Class Dept Public did As String Public dname As String Public emps As New depEmpsEnd ClassPublic Class Emp Public eid As String Public ename As StringEnd ClassPublic 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 PropertyEnd Class
![Page 11: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/11.jpg)
Code 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)
![Page 12: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/12.jpg)
What 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 > 1 Then MessageBox.Show("too many") Else eCount += 1 hiddenList.Add(e) End If End Sub
![Page 13: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/13.jpg)
• How to implement the Remove method?• How to implement the RemoveAt method?
![Page 14: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/14.jpg)
Nested 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
![Page 15: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/15.jpg)
Public 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 ClassEnd Class
![Page 16: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/16.jpg)
Public Class dep
Public depID As Integer
Public depName As String
End 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.count MessageBox.Show(test1.dependents.items(i).depname) Next For Each test2 In test1.dependents.items MessageBox.Show(test2.depID.ToString & test2.depName) Next
Code using collection class
![Page 17: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/17.jpg)
Store Objects in Storage
• Comma delimited file• Database• Serialization
![Page 18: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/18.jpg)
Classes and Files
• Two files with 1:M 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.
![Page 19: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/19.jpg)
Serializing Classes
• Add a Serializable attribute:– <Serializable()> Public Class Dept
![Page 20: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/20.jpg)
<Serializable()> Public Class Dept Public did As String Public dname As String Public emps As New depEmpsEnd Class<Serializable()> Public Class Emp Public eid As String Public ename As StringEnd Class
![Page 21: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/21.jpg)
Imports System.IOImports System.Runtime.Serialization.Formatters.BinaryPrivate 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.txt", 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
![Page 22: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/22.jpg)
Inheritance
• The process in which a new class can be based on an existing class, and will inherit that class’s 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.
![Page 23: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/23.jpg)
Inheritance ExamplePublic Class Emp Public Eid As String Public Ename As String Public salary As Double
Public Function tax() As Double tax = salary * 0.1 End FunctionEnd Class
Public Class secretary Inherits Emp Public WordsPerMinute As IntegerEnd Class
![Page 24: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/24.jpg)
Overriding• 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.
![Page 25: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/25.jpg)
Overriding a MethodPublic 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 FunctionEnd ClassPublic Class secretary Inherits Emp Public WordsPerMinute As Integer Public Overrides Function tax() As Double If salary > 3000 Then tax = salary * 0.1 Else tax = salary * 0.05 End If End FunctionEnd Class
![Page 26: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/26.jpg)
Overriding a PropertyPublic 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 PropertyEnd Class
![Page 27: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/27.jpg)
Public 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 > 5000 Then sal = 5000 Else sal = Value End If End Set End PropertyEnd Class
![Page 28: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/28.jpg)
MyBase
• 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.
![Page 29: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/29.jpg)
Public 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 > 3000 Then tax = salary * 0.1 Else tax = salary * 0.05 End If End FunctionEnd Class
Public Overrides Function tax() As Double If salary > 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.
![Page 30: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/30.jpg)
The 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.
![Page 31: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/31.jpg)
Abstract 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.
![Page 32: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/32.jpg)
Abstract Class ExamplePublic MustInherit Class clsEmp Public Eid As String Public Ename As String Public salary As Double MustOverride Function tax() As DoubleEnd ClassPublic Class clsEmpSecretary Inherits clsEmp Public Overrides Function tax() As Double If salary > 5000 Then tax = salary * 0.1 Else tax = salary * 0.1 End If End FunctionEnd Class
![Page 33: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/33.jpg)
NonInheritable 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.
![Page 34: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/34.jpg)
Base 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.
![Page 35: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/35.jpg)
Comparing 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
![Page 36: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/36.jpg)
Exception
• 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.
![Page 37: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/37.jpg)
Structured Error HandlingTry 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
![Page 38: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/38.jpg)
User-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
![Page 39: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/39.jpg)
Application Exception ExamplePublic 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 < 1 Or Value > 4 Then Throw New ApplicationException("Invalide JobCode") Else hiddenJobCode = Value End If End Set Get JobCode = hiddenJobCode End Get End PropertyEnd Class
![Page 40: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/40.jpg)
Catch 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.JobCode)
Catch err As ApplicationException
MessageBox.Show(err.Message)
TextBox1.Focus()
End Try
End Sub
![Page 41: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/41.jpg)
User-Defined Exception Class
Public Class JobCodeException
Inherits System.ApplicationException
Sub New(ByVal strMessage As String)
MyBase.New(strMessage)
End Sub
End Class
![Page 42: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/42.jpg)
Using User-Defined Exception in Class
Private hiddenJobCode As Long Public Property JobCode() Set(ByVal Value) If Value < 1 Or Value > 4 Then Throw New JobCodeException("Invalide JobCode") Else hiddenJobCode = Value End If End Set Get JobCode = hiddenJobCode End Get
![Page 43: VB Classes - 2](https://reader035.vdocuments.site/reader035/viewer/2022081604/56815300550346895dc121f9/html5/thumbnails/43.jpg)
Using 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.Message) TextBox4.Focus() TextBox4.SelectAll() End Try