C#内建接口:IEquatable泛型

    这节来讲一下泛型接口:IEquatable。

    IEquatable泛型接口处于System.Runtime命名空间下,最早在.NET Framework 2.0中发布,只有泛型版本。像之前我们讲过的IComparable,IEnumerable接口,它们属于是1.0时期的内建接口,那时C#还没有泛型的概念,而2.0以后的版本,才有泛型的概念。之所以出现泛型接口,是因为通过泛型可以减少值类型的装箱,以及实现类型安全。

a64a6fcb36784d472808646eda055198.png

IEquatable中有什么?

    我们先看一下IEquatable泛型接口中的元素:

804cf4b13f9082b85cd138321c1a7f89.png

    这个接口里边只有一个方法:Equals,返回一个Bool值,从名称中我们可以得知,这个接口规定了一个用于和其它类型作比较的规范,所有实现了这个接口的类,我们就可以调用其Equals方法来跟自己做比较,当前,前提是得跟泛型类型一致,下面我将通过一段代码来演示其用法:

4bf70e30fb085a10e591589ee3b7c5bf.png

    有这样一个测试类IEquatableTest,它有个Name属性,以及显示实现了IEquatable<IEquatableTest>接口得Equals方法(我个人觉得,为了与继承于Object的Equals方法做区分,您应该显示实现接口,避免在调用时出现歧义)。显式实现的Equals方法里边的内容是比较两个对象的Name是否相等。

    下面我们在Main方法中写代码调用一下:

b1513c7b7dd0e4a596c972add0854496.png

    控制台输出结果为:False。

3bcf9b9ece5140cf1abcc07e978a0b53.png

和Object.Equals的关系

    我们都知道,Object本身就有个Equals方法,它默认是比较一个引用,如果两个对象是同一个引用即相等,如果这个默认比较不满足,我们通过重写这个方法,也能自定义比较功能。但是这个方法接受一个Object类型的参数,存在装箱和类型安全这样的问题,因此我们也有可能需要一个性能高一些的,并且类型安全的比较方法,为了规范代码,微软推出了IEquatable泛型接口。

    我们可以认为Object的Equals是IEquatable的非泛型版本方法,但是在实际应用过程中,我还是推荐大家显式实现IEquatable,有一个良好的代码规范,会让人舒心,关于显示实现接口相关介绍请查看:接口(interface)。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 10(多线程)

创建线程&#xff1a;通过对java.lang包的查找&#xff0c;继承Thread类可以创建线程1&#xff0c;建立类继承Thread类2&#xff0c;复写Thread中的ran方法。3&#xff0c;调用线程的start()方法&#xff0c;该方法的作用是&#xff0c;启动线程&#xff0c;调用ran方法。publi…

地球空间与数字测绘知识总结

1、地理空间(geo-spatial) 一般指上至电离层,下至地壳与地幔交界的莫霍面之间的空间区域。上下大约有2000km。 2、自然球体 由地球自然表面所包围的形体称为地球自然形体。

(附)python3 只需3小时带你轻松入门——python常用一般性术语或词语的简单解释

术语一般解释dict 字典一种键值对的关系&#xff0c;一个键代表一个索引&#xff0c;一个键对应一个值index 索引在列表、数组、字典或一般容器中表示一个内容值的“地址”&#xff0c;通过索引可以获取值开发环境当前开发所需要的一些基本软件、硬件或操作系统list 列表一种数…

linux c之判断字符串是不是以另一字符串开始或者结尾

1 问题 判断字符串是不是以另一字符串开始或者结尾 2 代码实现 #include <stdio.h> #include <string.h>/***判断是字符串str是不是以start开始*/ int is_start_with(const char *str, char *start) {if (NULL == str || NULL == start){return -1;}int str_len …

联想台式计算机 不启动u盘,新电脑不识别u盘启动盘?不用送修,自己就能搞定!...

原标题&#xff1a;新电脑不识别u盘启动盘&#xff1f;不用送修&#xff0c;自己就能搞定&#xff01;新买的电脑想要通过u盘启动来装系统&#xff0c;但是一些用户却遇到难题了&#xff0c;以为制作好u盘启动盘就能直接开机启动了。殊不知&#xff0c;很多新电脑都是预装的win…

Hadoop(三)通过C#/python实现Hadoop MapReduce

MapReduceHadoop中将数据切分成块存在HDFS不同的DataNode中&#xff0c;如果想汇总&#xff0c;按照常规想法就是&#xff0c;移动数据到统计程序&#xff1a;先把数据读取到一个程序中&#xff0c;再进行汇总。但是HDFS存的数据量非常大时&#xff0c;对汇总程序所在的服务器将…

EntityFramework 动态构造排序 FuncIQueryableT, IOrderedQueryableT Dynamic

using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; /*** * jackchain * QQ:710782046* 2017-08-31* 动态构造OrderBy Linq序列* */namespace UFX.Tools {public class Convert…

hdu 5310 Souvenir

http://acm.hdu.edu.cn/showproblem.php?pid5310 题意&#xff1a;今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p 元, 同时也可以花q 元购买纪念品套装, 一个套装里有m 个纪念品. 今天总共有n 个参赛者, Soda想要知道最…

ArcGIS 10.2中栅格数据的属性表问题

什么条件下我们能在ArcGIS中看到栅格数据的属性表呢? 网上的说法是:对于单波段的整型ESRI GRID数据,如果它的像元值范围小于10万(max-min<1000000),并且少于500条唯一值,那么软件会为它创建一个“真正”的属性表存储在INFO文件夹的grid.VAT表格中。对于不满足上述条…

python简介及环境安装

Python的创始人为荷兰人吉多范罗苏姆 。1989年圣诞节期间&#xff0c;在阿姆斯特丹&#xff0c;Guido为了打发圣诞节的无趣&#xff0c;决心开发一个新的脚本解释程序&#xff0c;作为ABC语言的一种继承。 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释…

剑指offer之求两个数之和(不能使用四则运算)

1 题目 剑指offer之求两个数之和(不能使用四则运算) 2 代码实现 #include<stdio.h>int add(int num1, int num2) {int sum1;int carry;do{sum1 (num1 ^ num2);carry (num1 & num2) << 1;num1 sum1;num2 carry;} while (carry ! 0);return num1; }int mai…

ZOJ 3879 Capture the Flag(模拟)

思路&#xff1a;恶心模拟...照着题目怎么说就怎么做就好了 #include<bits/stdc.h> using namespace std; const int maxn 100000; #define exp 1e-5 struct Node {int id,rank;double score; }nodes[105];int vis[105][105][105]; int visit[105]; bool cmp1(Node a,No…

晋中学院计算机考研,晋中学院有多少人死在考研路上

晋中学院有多少人死在考研路上(2011-05-23 20:34:30)标签&#xff1a;日记杂谈有一句话叫作&#xff1a;长江后浪推前浪,前浪死在沙滩上&#xff0c;用来形容少年老成与故人的可怜。转眼间到了谋取出路的时候了&#xff0c;班上几乎所有的人都在那里嚷嚷的要考研&#xff0c;但…

解决ArcGIS 9.3卸载时出现invalid install.log file的方法

地信君都知道,ArcGIS 9.3 License卸载时常出现“invalid install.log file”的错误提示,而导致卸载失败,如下:

Nodejs前端服务器压缩图片

Nodejs作为前端服务器&#xff0c;自然能承担处理图片的能力&#xff0c; 使用GM for nodejs 作为图片处理器&#xff0c;调用ImageMagick处理图片 使用ImageMagick var imageMagick gm.subClass({ imageMagick: true }); 然后就像文档中使用gm那样使用ImageMagick即可 &#…

人工神经网络心得体会_卷积神经网络学习心得

萌新小白一只&#xff0c;刚刚接触AI&#xff0c;在遍历人工智能发展时就看到了“卷积神经网络”&#xff0c;顿时想到了去年被概率论支配的恐惧&#xff0c;因此想在这里分享一点经验来帮助大家更好理解。所谓“卷积神经网络”&#xff0c;就是结合卷积公式&#xff0c;建立类…

使用virt-install安装kvm虚拟机时需要的问题

使用virt-install安装kvm虚拟机时需要的问题今天在做kvm的实验时&#xff0c;使用virt-install安装虚拟机的过程中遇到了一些问题&#xff0c;其中有一个问题弄了好久都没有弄好&#xff0c;不过现在已经好了。由于我使用virt-install命令安装虚拟机的&#xff0c;其命令如下&a…

样式和主题的区别(Styles and Themes)

参考资料&#xff1a; http://www.tuicool.com/articles/VfiUba http://android.blog.51cto.com/268543/303728/转载于:https://www.cnblogs.com/8dull/p/5387072.html

从同步函数 hello-world-dotnet 开始探索OpenFunction

OpenFunction[1] 是一个现代化的云原生 FaaS&#xff08;函数即服务&#xff09;框架&#xff0c;它引入了很多非常优秀的开源技术栈&#xff0c;包括 Knative、Tekton、Shipwright、Dapr、KEDA 等&#xff0c;这些技术栈为打造新一代开源函数计算平台提供了无限可能&#xff1…

剑指offer之股票的最大利润

1 问题 求股票的最大利润&#xff0c;简言之就是求一个数组里面元素差的最大值&#xff0c;要求时间复杂度O(n) 2 代码实现 #include <stdio.h> #include <stdlib.h>int maxDiff(int *number, int length) {if (NULL number || length < 2){return 0;}int mi…