`
poson
  • 浏览: 357813 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C# 重载等号运算符。==,!=,Equal,下标运算符

    博客分类:
  • c++
阅读更多

 

通过一个实际的例子来介绍。其中重载==!=,Equal,GetHashCode函数。

 

public class Record

 

 

{

 

public string[] arr = null;

 

public bool hasEqual = false;

 

//重载一个下标运算符号

 

public string this[int index]

 

{

 

get

 

{

 

return arr[index];

 

}

 

set

 

{

 

arr[index] = value;

 

}

 

}

 

 

public override int GetHashCode()

 

{

 

//在这里使用字符串数组的hashcode,避免自己完成一个算法

 

return arr.GetHashCode();

 

}

 

 

public Record(int count)

 

{

 

if (count < 1)

 

{

 

throw new Exception("数组的长度不能小于1");

 

}

 

arr = new string[count];

 

}

 

public static bool operator ==(Record rec1, Record rec2)

 

{

 

//注意我们调用Equals来判断是否相等。而不是在自己的函数中判、断。这是因为如果在自己的函数中判断。比如有rec2=null的情况。如果是这种情况。我们要判断if(rec2==null){…}。其中rec2==null也是调用一个等号运算符,这里面有一个递归的过程,造成了死循环。

 

return Object.Equals(rec1, rec2);

 

 

}

 

public static bool operator !=(Record rec1, Record rec2)

 

{

 

return !Object.Equals(rec1, rec2);

 

}

 

 

public override bool Equals(object obj)

 

{

 

//判断与之比较的类型是否为null。这样不会造成递归的情况

 

if (obj == null)

 

return false;

 

 

if (GetType() != obj.GetType())

 

return false;

 

 

Record rec = (Record)obj;

 

int count = rec.arr.Length;

 

 

for (int i = 0; i < count; i++)

 

{

 

if (this.arr[i] != rec.arr[i])

 

{

 

return false;

 

}

 

}

 

return true;

 

}

 

}

分享到:
评论

相关推荐

    c++ 运算符重载(重载+ = ==)

    在C++编程语言中,运算符重载是一项重要的特性,它允许我们为自定义类型赋予新的操作含义。这里,我们将深入探讨如何为一个名为`str`的类重载`+=`和`==`运算符,这个类是模仿C++内置的`std::string`类型而设计的。 ...

    cpp代码-字符串类 (运算符重载 =,[],==,!=,&lt;&lt;,>>)

    在本主题中,我们将深入探讨如何通过运算符重载来增强字符串类的功能,特别是`=`、`[]`、`==`、`!=`、`和`&gt;&gt;`这些运算符。 1. **运算符`=`:** 这是赋值运算符,用于将一个字符串的值赋给另一个字符串。在`std::...

    运算符重载

    定义表示形状的抽象类及相应的派生类,并实现相关操作符重载。 (1)定义表示形状的抽象...最后将所有形状对象按面积从大到小排序(要求使用重载的运算符“&gt;”来判断对象的面积的大小关系),并输出排序后的对象信息。

    简单谈谈C语言中的= 和==、!=

    =`是三个非常基础且重要的运算符,它们在程序逻辑中起到关键的作用。让我们深入探讨一下这三个运算符的含义和用法。 1. `=`:赋值运算符 赋值运算符`=`用于将右侧表达式的结果赋值给左侧的变量。它执行的是一个...

    两个等号与三个等号的区别

    在编程世界中,等号(=)和三个等号(===)是两种常见的比较运算符,它们在不同的上下文和语言中有着不同的含义和用法。这篇文章将详细探讨这两个符号在编程中的区别。 首先,我们要了解的是单个等号(=)。在...

    ==和equals的比较

    在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `equals` 之前,我们需要了解堆和栈的区别。堆是一种动态分配的内存区域,由程序员自己申请...

    equal与==区别

    ### equal与==的区别 在Java编程语言中,`equal`方法和`==`操作符都是用来比较对象之间是否相等的工具,但它们之间存在重要的差异。本文将从三个方面进行详细的对比分析:字符串的比较、非字符串对象的比较以及基本...

    CString 操作文档

    =”、“&gt;=”、“&gt;”、“&lt;=”、“&lt;” 等比较运算符,可用于两个字符串间的各种比较运算。 **示例:** ```cpp CString str1 = "Hello"; CString str2 = "hello"; bool equal = (str1 == str2); // equal 的值为 false...

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    =i4",因为 i3 和 i4 引用的是不同的对象。 为什么在 -128 到 127 之间的 Integer 对象是同一个引用? 在 Java 中,Integer 对象在 -128 到 127 之间的值是缓存的,这意味着在这个范围内的所有 Integer 对象都是同...

    一维动态数组实现的矩阵类

    具体用法与测试用例Main.cpp里有3个测试用例,分别是针对构造函数属性计算与运算符重载的 内已包含测试工程xp\vc6.0\上亲测通过,并经过BoundsChecker测试没有内存泄漏。有兴趣的童鞋可以下作参考。 注意: 1、...

    自定义的矩阵类,内含源码与测试工程

    具体用法与测试用例Main.cpp里有3个测试用例,分别是针对构造函数属性计算与运算符重载的 内已包含测试工程xp\vc6.0\上亲测通过,并经过BoundsChecker测试没有内存泄漏。有兴趣的童鞋可以下作参考。 注意: 1、...

    C#中的 == 和equals()区别浅析

    在C#编程语言中,`==`运算符和`Equals()`方法是用来比较对象或值类型是否相等的两种常见方式,但它们之间存在着显著的区别。本文将深入探讨这两种比较方式的工作原理及其应用场景。 首先,`==`运算符是C#中的一个...

    PHP程序设计-3期(KC016) 2.5.4比较运算符常见问题.docx

    ="分别表示等于、大于、小于、大于等于、小于等于和不等于。这些运算符在比较两个值后,会返回true或false,而不是具体的数值。例如: ```php $a = 10; $b = 5; if ($a &gt; $b) { echo "a is greater than b"; } ``` ...

    JAVA代码、方法、运算符大全

    2. 比较运算符:`==`、`!=`、`&gt;`、`、`&gt;=`、`&lt;=`用于比较两个值的大小或相等性。 3. 逻辑运算符:`&&`(逻辑与)、`||`(逻辑或)、`!`(逻辑非)用于组合布尔表达式。 4. 位运算符:如`&`、`|`、`^`、`~`、`、`&gt;&gt;`...

    c语言 运算符

    在C语言中,赋值运算符用“=”表示,但需要注意的是,“=”并不表示数学上的等号,而是用来执行赋值操作。例如: ```c int count = 5; int total1 = total2 = 0; ``` 这里的`count = 5`表示将数字5赋值给变量`...

    02. 【数据类型转换、运算符、方法入门】.zip

    =,&lt;,&gt;,&lt;=,&gt;=),逻辑运算符(&&,||,!),赋值运算符(=,+=,-=,*=,/=,%=),位运算符(&,|,^,~,,&gt;&gt;,&gt;&gt;&gt;)等。运算符的优先级和结合性也是编程中需要注意的重要点,合理的使用可以提高代码的效率和...

    Java基础知识:运算符

    boolean isNotEqual = a != b; // true boolean isGreater = a &gt; b; // true boolean isLess = a ; // false boolean isGreaterOrEqual = a &gt;= b; // true boolean isLessOrEqual = a &lt;= b; // false ``` 逻辑...

    ruby中的双等号==问题详解

    在Ruby语言中,提供了四种比较操作符:`equal?`, `eql?`, `==`, 和 `===`。这些操作符在不同场景下的使用可能会产生不同的结果,特别是在处理不同类的对象时尤其需要注意。本文主要聚焦于`==`操作符的使用及其潜在的...

    Java 零基础运算符.md

    boolean isNotEqual = (a != b); System.out.println("是否不相等:" + isNotEqual); ``` 输出结果为: ``` 是否不相等:true ``` ##### 大于运算符(&gt;) 大于运算符 `&gt;` 用于检查一个数值是否大于另一个数值。例如...

    Java语言基础(运算符介绍,程序控制流介绍)

    =、&lt;、&gt;、&lt;=、&gt;=)、逻辑运算符(&&、||、!)、位运算符以及赋值运算符。例如,比较两个整数是否相等: ```java int a = 5; int b = 5; if (a == b) { System.out.println("a and b are equal."); } ``` "第4章 ...

Global site tag (gtag.js) - Google Analytics