对象比较(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));
}
}
///等价与恒等,下面我使用了一些例子来说明,如果要复习的话,仔细看一下
///例子的每个注释就可以了
///这里要注明一点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/
加支付宝好友偷能量挖...