如何比较两个实例是否为同一实例?如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 Sub End 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 Sub End 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 Sub End Module判定两实例是否相等可应用与U层接收的数据信息与数据库中的信息比较,如输入一个学生信息当验证此学生信息是否存在于数据库中时可以在Student类中重写Equals方法。
作者:leimengyuanlian 发表于2013-2-26 8:57:51 原文链接
阅读:67 评论:0 查看评论