本篇内容介绍了“C#运算符重载的实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
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#运算符重载的实例介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!