比较两个实例是否为同一对象的实例化

本文探讨如何比较两个实例是否为同一对象的实例化。当对象为同一类的实例化引用,或者两个实例化对象的属性对应相等时,它们可能被视为同一对象。通过重写Equals方法,可以实现对同类对象的比较,以确定它们是否为同一实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      如何比较两个实例是否为同一实例?如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方法。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值