C#讲义-10操作符重载
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
8
警告CS0661: “ClassLibrary3.Complex”定义运算符== 或运算符!=,但不重写Object.GetHashCode() 设计者认为如果任何对象的任何实例都能被放入到哈 希表集合中,其用途将很大。为此,System.Object提 供了一个虚GetHashCode方法,使得哈希代码可以被 所有对象获取 哈希函数通常是特定于每个 Type 的,而且,必须至 少使用一个实例字段作为输入。 如果两个类型相同的对象表示相同的值,则哈希函数 必须为两个对象返回相同的常数值。 Hash值相同,对象不一定相等。 为了获得最佳性能,哈希函数应为输入生成随机分布。
5
相等操作符
public static bool operator ==(Complex c1, Complex c2) { if (c1.real == c2.real && c1.imaginary == c2.imaginary) return true; else return false; }
6
要求也要定义匹配的运算符“!=”
public static bool operator !=(Complex c1, Complex c2) { if (c1==c2) return false; else return true; }
7
警告CS0660: “ClassLibrary3.Complex”定义运算符 == 或运算符!=,但不重写Object.Equals(object o) public override bool Equals(object obj) { if (!(obj is Complex)) return false; if (object.ReferenceEquals(this, obj)) { return true; } if (this != (Complex)obj) return false; else return true;
2
}
Complex a=new Complex (3,4); Complex b=new Complex (5,6); Complex c=Complex.Add (a,b); //静态函数 c=a.Add(b); //非静态函数 一个更加直观的实现方式是对“+”进行运算符 重载。
3
public struct Complex {…… public static Complex operator +(Complex c1, Complex c2) { return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); } 以“operator +”代替函数“Add”
Complex a=new Complex (3,4); Complex b=new Complex (5,6); Complex c=a+b;
//a+b被翻译为:Complex.operator+(a,b);
4
C++中允许如下的重载方式: public Complex operator + (Complex a) { return new Complex (real+a.real ,imaginary +a.imaginary );} C#中不允许。
10 操作符重载
操作符重载是c十十的突出特征,Java语言不支 持操作符重载。 C#支持操作符重载。
1
public struct Complex { public int real; public int imaginary; public Complex(int real, int imaginary) //构造函数 { this.real = real; this.imaginary = imaginary; } public static Complex Add(Complex a,Complex b) //静态函数 { return new Complex (a.real +b.real ,a.imaginary +b.imaginary );} public Complex Add(Complex a) //非静态函数 { return new Complex (real+a.real ,imaginary +a.imaginary );}
9
public override int GetHashCode() { return this.real.GetHashCode(); }
10
Βιβλιοθήκη Baidu