C#运算符重载实例是掌握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#运算符重载实例的基本情况就向你介绍到这里,希望对你有所帮助。
【编辑推荐】