Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

如何比较两个对象是否为同一对象

$
0
0

      如何比较两个实例是否为同一实例?如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 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>