, obj);
3.2.3.3、结论:程序判断struct里面所有字段的值,如果全部相等,返回true;否则,返回false。
3.2.4、复杂结构体(有值类型、引用类型,重写Equal函数 and 运算符'==')
3.2.4.1、测试代码:
public struct ValPoint
{
public double x;
public double y;
public double z;
public ValPoint(double X, double Y, double Z)
{
this.x = X;
this.y = Y;
this.z = Z;
}
public static bool operator ==(ValPoint left, ValPoint right)
{
return left.x == right.x;
}
public static bool operator !=(ValPoint left, ValPoint right)
{
return left.x != right.x;
}
}
public class RefPoint
{
public double x;
public double y;
public double z;
public RefPoint(double X, double Y, double Z)
{
this.x = X;
this.y = Y;
this.z = Z;
}
}
public struct ValLine
{
public ValPoint vPoint; // 值类型成员
public RefPoint rPoint; // 引用类型成员
public ValLine(ValPoint vPoint, RefPoint rPoint)
{
this.vPoint = vPoint;
this.rPoint = rPoint;
}
public override bool Equals(Object obj)
{
if (!(obj is ValLine))
{
return false;
}
if (((ValLine)obj).vPoint == this.vPoint)
{
return true;
}
return false;
}
public bool Equals(ValLine obj)
{
if (obj.vPoint == this.vPoint)
{
return true;
}
return false;
}
public static bool operator ==(ValLine left, ValLine right)
{
return left.vPoint == right.vPoint;
}
public static bool operator !=(ValLine left, ValLine right)
{
return left.vPoint != right.vPoint;
}
}
ValPoint vPoint = new ValPoint(1, 2, 3);
ValPoint vPoint2 = new ValPoint(1, 2, 3);
ValPoint vPoint3 = new ValPoint(10, 20, 30);
RefPoint rPoint = new RefPoint(4, 5, 6);
RefPoint rPoint2 = new RefPoint(7, 8, 9);
ValLine p1 = new ValLine(vPoint, rPoint);
ValLine p2 = p1;
p2.vPoint = vPoint2;
Console.WriteLine(p1 == p2); //返回true
Console.WriteLine(p1.Equals(p2)); //返回true
Console.WriteLine(p1.Equals((object)p2)); //返回true
p2 = p1;
p2.vPoint = vPoint3;
Console.WriteLine(p1 == p2); //返回true
Console.WriteLine(p1.Equals(p2)); //返回false
Console.WriteLine(p1.Equals((object)p2)); //返回false
p2 = p1;
p2.rPoint = rPoint2;
Console.WriteLine(p1 == p2); //返回true
Console.WriteLine(p1.Equals(p2)); //返回true
Console.WriteLine(p1.Equals((object)p2)); //返回true
3.2.4.2、结论:此时程序执行我们重写的Equal函数 and 运算符'=='。
3.2.5、复杂结构体(内部值类型、引用类型,不重写Equal函数 and 运算符'==')
3.2.5.1、测试代码:
public struct ValPoint
{
public double x;
public double y;
public double z;
public ValPoint(double X, double Y, double Z)
{
this.x = X;
this.y = Y;
this.z = Z;
}
}
public class RefPoint
{
public double x;
public double y;
public double z;
public RefPoint(double X, double Y, double Z)
{
this.x = X;
this.y = Y;
this.z = Z;
}
}
public struct ValLine
{
public ValPoint vPoint; // 值类型成员
public RefPoint rPoint; // 引用类型成员
public ValLine(ValPoint vPoint, RefPoint rPoint)
{
this.vPoint = vPoint;
this.rPoint = rPoint;
}
}
ValPoint vPoint = new ValPoint(1, 2, 3);
ValPoint vPoint2 = new ValPoint(1, 2, 3);
ValPoint vPoint3 = new ValPoint(10, 20, 30);
RefPoint rPoint = new RefPoint(4, 5, 6);
RefPoint rPoint2 = new RefPoint(7, 8, 9);
ValLine p1 = new ValLine(vPoint, rPoint);
ValLine p2 = p1;
Console.WriteLine(p1 == p2);//编译错误:运算符"=="无法应用于"Point"和"Point"类型的操作数
p2.vPoint = vPoint2;
Console.WriteLine(p1.Equals(p2)); //返回true
Console.WriteLine(p1.Equals((object)p2)); //返回true
p2 = p1;
p2.vPoint = vPoint3;
Console.WriteLine(p1.Equals(p2)); //返回false
Console.WriteLine(p1.Equals((object)p2)); //返回false
p2 =