当前位置:文档之家› C#讲义-10操作符重载

C#讲义-10操作符重载


}
8


警告CS0661: “plex”定义运算符== 或运算符!=,但不重写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; }
9
public override int GetHashCode() { return this.real.GetHashCode(); }
10
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 );}
6

要求也要定义匹配的运算符“!=”
public static bool operator !=(Complex c1, Complex c2) { if (c1==c2) return false; else returex”定义运算符 == 或运算符!=,但不重写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”
相关主题