如何比較兩個執行個體是否為同一執行個體?如student1和student2兩個對象如何確定他們是否是代表同一執行個體對象?首先如果兩個對象都是對同一類的執行個體化對象的引用,那麼這兩個對象必然是同一對象的執行個體。如果比較的對象分別為兩個執行個體化對象,判斷這兩個執行個體相等的要求是兩個執行個體對象的屬性對應相等。
對象引用
所謂對象引用是說對象沒有進過執行個體化跟初始化而是直接引用另一個執行個體化並初始化的對象。如
Public Class Student Private _age As Long Private _name As String Private _sex As String Public Sub New() End Sub Public Property sex Set(ByVal value) Me._sex = value End Set Get Return Me._sex End Get End Property Public Property age Set(ByVal value) Me._age = value End Set Get Return Me._age End Get End Property Public Property name Set(ByVal value) _name = value End Set Get Return _name End Get End Property End Class
Module Module1 Sub Main() Dim student1 As New Student student1.age = 18 student1.name = "wangming" student1.sex = "男" Dim student2 As Student student2 = student1 End SubEnd Module
很明顯student1是對Student的執行個體化,而student2並沒有執行個體化只是對student1的引用所以student1與student2比然相等(student1與student2的姓名、年齡、性別都相同)
兩個對象所有屬性都相同
如果相比較的兩個對象分別來自於類的執行個體化並經過了初始化,判斷他們是否為同一執行個體就要看他們的屬性是否都相同。如:
Module Module1 Sub Main() Dim student1 As New Student student1.age = 18 student1.name = "wangming" student1.sex = "男" Dim student2 As New Student student2.age = 18 student2.name = "wangming" student2.sex = "男" End SubEnd Module
很明顯student1與student2都是對Student的執行個體化,所以為兩個對象。由於student1與student2的姓名、年齡、性別都相同,所以可以判斷student1與student2為同一個學生。
判斷兩個執行個體是否為同一執行個體方法的實現
所有的類都繼承了一個Equals方法,Equals方法用來與同類對象之間的比較。所以要實現兩個對象間的比較就要對該方法進行override(重寫)。即要實現兩個student間的比較就要在Student類中重寫該方法
Public Class Student Private _age As Long Private _name As String Private _sex As String Public Sub New() End Sub Public Property sex Set(ByVal value) Me._sex = value End Set Get Return Me._sex End Get End Property Public Property age Set(ByVal value) Me._age = value End Set Get Return Me._age End Get End Property Public Property name Set(ByVal value) _name = value End Set Get Return _name End Get End Property Public Overrides Function Equals(ByVal obj As Object) As Boolean Dim stu As Student = obj Dim flag As Boolean = False If IsDBNull(stu) Then flag = False ElseIf Me Is stu Then ‘判斷是否為對象的引用 flag = True ElseIf Me._sex = stu.sex And Me._age = stu.age And Me._name = stu.name Then ’判斷兩個對象的屬性是否完全相同 flag = True Else flag = False End If Return flag End Function End Class
Module Module1 Sub Main() 'Dim student1 As New Student 'student1.age = 18 'student1.name = "wangming" 'student1.sex = "男" 'Dim student2 As Student 'student2 = student1 Dim student1 As New Student student1.age = 18 student1.name = "wangming" student1.sex = "男" Dim student2 As New Student student2.age = 18 student2.name = "wangming" student2.sex = "男" Console.WriteLine(student1.Equals(student2))'輸出兩個對象的比較結果,值為Boolean End SubEnd Module
判定兩執行個體是否相等可應用與U層接收的資料資訊與資料庫中的資訊比較,如輸入一個學生資訊當驗證此學生資訊是否存在於資料庫中時可以在Student類中重寫Equals方法。