网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > .NET框架 > .Net中的相等性比较  

.Net中的相等性比较

2006-09-18  作者:网管整理  来源:bitscn.com  点评 投稿 收藏

    .Net中的运算符是通过静态函数实现的,如果要为一个类定义某个运算符,需要声明一个具有operator关键字的静态成员函数。这样,运算符就不能利用多态和重载的特性了。对于相等(==)和不相等(!=)运算符也一样,会调用运算符两边变量类型的静态比较方法,而不会调用变量所指向的对象类型的比较方法。 中国网管论坛bbs.bitsCN.com

网管u家u.bitscn@com

    .Net中预定义的类型,都已经内建了相等和不相等运算符。对于预定义的值类型,则比较操作数的值,对于string以外的引用类型,是比较引用,是否指向同一个对象。对于string类型,会比较字符串的值。对于自己定义的引用类型,默认就具有相等和不相等运算符,是比较引用,所以可以不实现这两个运算符,如果要进行其它方式的比较,再去实现。而自己定义的值类型,如果要比较,就必须自己实现这两个运算符。

网管u家u.bitscn@com

    object类有三个比较方法。非静态的Equals方法只是比较引用,但它是可以重载的,如果想利用多态性,可以重载这个方法。对于预定义的类型,这个方法作用与相等运算符是一致的。静态的Equals方法调用了非静态的Equals方法进行比较,这是源码:

网管网www.bitscn.com


中国网管论坛bbs.bitsCN.com

public static bool Equals(object objA, object objB) 网管u家u.bitsCN.com

{ 网管联盟bitsCN@com

      if (objA == objB)

网管联盟bitsCN@com

      {

中国网管联盟bitsCN.com

            return true;

网管下载dl.bitscn.com

      }

网管联盟bitsCN@com

      if ((objA != null) && (objB != null))

网管u家u.bitsCN.com

      { 网管下载dl.bitscn.com

            return objA.Equals(objB);

网管联盟bitsCN_com

      } 网管论坛bbs_bitsCN_com

      return false;

网管u家u.bitsCN.com

}
网管网www_bitscn_com

    静态的ReferenceEquals方法只是调用了object类型相等运算符,而object类型相等运算符是比较引用,这是源码:

网管u家u.bitscn@com

网管联盟bitsCN@com

public static bool ReferenceEquals(object objA, object objB)

网管联盟bitsCN_com

{

网管网www.bitscn.com

      return (objA == objB); 网管网www_bitscn_com

}

中国网管论坛bbs.bitsCN.com

   就是说,object类本身的这三个方法都是比较引用,因为object类是没有数据的。 网管联盟bitsCN_com

另外,值得注意一下,.Netstring类实例的建立是做了优化的。例如,在一个方法中定义: 网管下载dl.bitscn.com

string a = “shit”; 网管联盟bitsCN_com

string b = “shit”; 中国网管联盟bitsCN.com

bool equal = object.ReferenceEquals(a, b);
中国网管联盟bitsCN.com

   结果equal的值为true。就是说,如果建立的string变量被赋予相同的值,在内存中只构建了一个string对象的实例。因为string是“只读”的,这样做是安全的。

网管u家u.bitscn@com


TAGs比较   运算   类型   方法   相等   object   静态   定义   引用   objB    
 上一篇:介绍.NET Framework 3.0新特性   下一篇:.Net2.0使用ConfigurationManager
.Net中的相等性比较 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: