=波波日志 > Asp.Net/C#/WCF > 对象比较(Equals)=
[转]对象比较(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/
类别:Asp.Net/C#/WCF 作者:转载 日期:2010-12-07 【评论:0】
相关文章
暂时没有评论!
发表留言
热门博文
- IE里Cookie跨域不能读取
- web服务因URL意外地以/**结束,请求格式无法识别
- 去掉隐藏asp.net编译出错aspxerrorpath错误参数
- 解决asp.net验证视图状态 MAC 失败
- 找不到System.Web.Script.Services.ScriptService
- 在aspx,ashx页面挂起线程执行
最新博文
- WCF利用限流(Throttling)控制并发访问[下篇]
- WCF利用限流(Throttling)控制并发访问[上篇]
- ConcurrencyMode.Multiple模式下的WCF服务同步上下文对并发的影响[下篇]
- ConcurrencyMode.Multiple模式下的WCF服务同步上下文对并发的影响[上篇]
- WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
- C#如何设置标记方法等为否决的不可用
随机博文
- C#资源释放的方法
- 7.4 ADO与ADO.NET
- ashx是什么文件,如何创建
- wcf创建基于MSMQ的Responsive Service
- Response.Redirect Session丢失
- Asp.net中Get和Set的使用
广告商赞助

