对象比较(Equals)

+展开
-C#
///对象比较
///等价与恒等,下面我使用了一些例子来说明,如果要复习的话,仔细看一下
///例子的每个注释就可以了
///这里要注明一点Equals方法对于引用类型是比较两个变量是否引用了同一个
///对象,它是不管对象的值是否一致的,
///但是,Equals方法对于值类型是比较两个值对象内的值是否相等。


using System;
using System.Diagnostics;

//定义一个引用类型
class TypeRef
{
    public int state;
}

//定义一个结构类型
struct TypeVal
{
    public int state;
}


//主程序
public class program
{
    //Main方法开始
    public static void Main()
    {
        //创建一个引用类型的对象
        TypeRef ref1 = new TypeRef();
        //给创建的引用类型对象赋值
        ref1.state = 3;
        //再次创建一个新的引用类型对象
        TypeRef ref2 = new TypeRef();
        //给新创建的引用类型对象赋值
        ref2.state = 3;
        //如果 ref1与ref2没有引用同一个对象 那么不会弹出消息(实际上没有弹出消息)
        Debug.Assert(ref1 != ref2);
        //如果 ref1与ref2没有引用同一个对象 那么不会弹出消息(实际上没有弹出消息)
        Debug.Assert(!ref1.Equals(ref2));
        //如果 ref1与ref2没有引用同一个对象 那么不会弹出消息(实际上没有弹出消息)
        Debug.Assert(!object.ReferenceEquals(ref1, ref2));
        //这里很重要(将ref1变量引用的对象传给ref2)
        ref2 = ref1;
        //如果 ref1与ref2引用了同一个对象 那么不会弹出消息(实际上没有弹出消息)
        Debug.Assert(ref1 == ref2);
        //如果 ref1与ref2引用了同一个对象 那么不会弹出消息(实际上没有弹出消息)
        Debug.Assert(ref1.Equals(ref2));
        //如果 ref1与ref2引用了同一个对象 那么不会弹出消息(实际上没有弹出消息)
        Debug.Assert(object.ReferenceEquals(ref1, ref2));

        //创建值类型对象
        TypeVal val1 = new TypeVal();
        //给值类型对象赋值
        val1.state = 3;
        //再创建一个值类型对象
        TypeVal val2 = new TypeVal();
        //给值类型对象赋值
        val2.state = 3;
        //如果两个值类型的对象内的值相等,那么不会弹出消息
        Debug.Assert(val1.Equals(val2));
        //更改一个值类型对象的值
        val1.state = 4;
        //如果两个值类型的对象内的值不相等,那么不会弹出消息
        Debug.Assert(!val1.Equals(val2));
    }
}

来源:http://2sws.blog.163.com/blog/static/179102492009843457270/

加支付宝好友偷能量挖...


评论(0)网络
阅读(78)喜欢(0)Asp.Net/C#/WCF