C#引用比较和内容比较

1、静态方法Object.ReferenceEqual,实际实现为引用比较。

2、静态方法Object.Equal, 实际实现为引用比较。(实际调用了实例方法Equal)

3、Object实例方法Equal,实际实现为引用比较。(微软原意Equal应该为内容比较,但默认实现并不是这样,开发者可以通过在自己设计的类中重写该方法来实现内容比较。)

4、Object的操作符==,实际实现为引用比较。(微软原意==可以看作中间选项,即既可以为内容比较,也可以为引用比较,开发者可以通过在自己设计的类中重写该方法来实现内容比较或引用比较。)

总结:

在最开始,只有Object类的时候,所有比较均为引用比较。

接下来:

在实现值类型的时候,微软重写了Equal方法 和 == 操作符,实现了值类型的内容比较,所以所有值类型的Equal和==均为内容比较。

在实现引用类型的时候,有部分类重写了Equal方法 和 == 操作符,实现了内容比较,典型的是String这个类。其他未重写该方法的类型均为引用比较,因为继承了Object的实现。

建议:
1、想要进行内容比较,请用实例方法Equal,如string类。
2、值类型的比较可以用==。

3、引用比较用Object.ReferenceEqual。

时间: 2024-10-28 01:53:20

C#引用比较和内容比较的相关文章

半个月学习的it内容

1  基本头部标签: 1 head: HEAD里面主要放一些有关网页设置的相关语句-->2编码格式: 设置网页的字符集编码格式:GB2312,简体中文的编码格式 GBK:扩展的国标码,比国标码多了更多的编码格式.UTF-8:万国码.可以兼容绝大数国家的语言.HTNL4之前,声明字符集编码的格式<meta http-equiv="Content-type" content="text/html 3 title:标题 TITLE是网页的标题也就是网页选项卡上的文字 4

可用变量和变量的引用

来回切换还是不爽,给虚拟机装上了epp <html> <head> <title> 系统变量</title> </head> <body> <?php $value0="guest";//赋值 $$value0="customer";//$$value0=$guest=customer echo $guest."<br />";//输出(echo=print

ZeroMQ接口函数之 :zmq_msg_move - 将一个消息里面的内容移动到另一个消息里面

ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_move zmq_msg_move(3)   ØMQ Manual - ØMQ/3.2.5 Name zmq_msg_move - 将一个消息里面的内容移动到另一个消息里面 Synopsis int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); Description zmq_msg_move()函数将会把src参数指定的消息对象里面的内容移动到dest

JavaScript的值传递和引用传递

本文和大家分享的主要是javascript中值传递和引用传递相关内容,一起来看看吧,希望对大家学习javascript有所帮助. JavaScript有5种基本的数据类型,分别是:布尔.null.undefined.String和Number.这些基本类型在赋值的时候是通过值传递的方式.值得注意的是还有另外三种类型: Array.Function和Object,它们通过引用来传递.从底层技术上看,它们三都是对象. 基本数据类型 如果一个基本的数据类型绑定到某个变量,我们可以认为该变量包含这个基本

PHP的学习--PHP的引用

引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针,替代的是,引用是符号表别名.注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字.最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身.引用可以被看作是 Unix 文件系统中的 hardlink. 引用做什么 PHP 的引用允许用两个变量来指向同一个内容.意思是,当这样做时: <?php $a =& $b; ?> 这意味着 $a 和 $

数据引用Data References

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4293361.html 定义引用变量Reference Variables. 141 动态创建数据对象Creating Data Objects Dynamically. 141 获取数据对象引用Getting References to D

C++中引用的常见用法

在C++中引用类型是一个强大的存在,它一定程度上规避了指针带来的风险,并且使得函数参数之间的传值和通信变得异常灵活. 1.引用的概念 在C++中,可以定义引用如下: 1 int n; 2 int &r = n; 这样定义以后,r就是int型变量n的一个引用.可以理解为给变量n取了一个“别名”叫r,从此r跟n便绑定在一起了.修改r的值,实际上也就等于修改了n的值:使用r,实际上也就等于使用n. 需要注意的是:引用类型在定义时就必须初始化(如上述代码将其初始化为n)——这是很自然的,试想一下我们如果

Java中String是不是引用传递?

本文转自:http://www.jcodecraeer.com/a/chengxusheji/java/2012/0805/340.html 编者语:书上都说string是引用类型,但事实上我所看到的string和所谓的值类型没有什么区别,但通过看以下的文章,明白了: 1.string a="abc";之后,如果a="xy",则是a并没有改变内存中已经存在的"abc",而是又创建了另外一个实例.实际上相当于:string a=new String

C语言学习笔记 (002) - C++中引用和指针的区别(转载)

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空--对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此