C#运算符重载

2024-12-28 01:41:00
推荐回答(2个)
回答1:

如你现在创建了一个自定义类叫 苹果,正常情况下,如果你定义二个变量 苹果A和苹果B实例化它们,然后你想知道 苹果A-苹果B 能得到什么,默认这二个变量是不能直接运算的,如果你要实现 苹果 类的 "-" 运算,那么你必须重载它的 运算符"-",然后自己在里面实现你的操作。 比如 你可以实现说两个不同的菜果相减返回一个烂苹果或返回null

public class Apple{
    public decimal Weight{get;set;}
    public static decimal operator +(Apple a1, Apple a2)
   {
         return a1.Weight-a2.Weight;
   }
}

Apple a=new Apple{Weight=200};
Apple b=new Apple{Weight=300};

Console.Write(b-a);

也是网上找的,不过感觉还是比较好理解的

回答2:

一个平面向量的定义例子,其中向量的加减乘(分量相乘)除(分量相除)用到了操作符重载的技巧。
其实操作符重载就是实现一个该类型的静态函数,并通过操作符来通知编译器来调用对应的函数功能。通常需要为这个函数指定一个返回值和若干个参数,对于形如“a+b”的双目运算,指定两个传入参数即可。

public struct Vector2
{
public float X, Y;
public float Length
{
get { return (float)Math.Sqrt(X * X + Y * Y); }
set { this = this * value; }
}
public Vector2 Normalized { get { return this / Length; } }
public Vector2(float x, float y)
{
this.X = x; this.Y = y;
}
public Vector2(Vector3 v)
{
this.X = v.X; this.Y = v.Y;
}

public static Vector2 operator -(Vector2 a)
{
return new Vector2(-a.X, -a.Y);
}
public static Vector2 operator +(Vector2 a, Vector2 b)
{
return new Vector2(a.X + b.X, a.Y + b.Y);
}
public static Vector2 operator -(Vector2 a, Vector2 b)
{
return new Vector2(a.X - b.X, a.Y - b.Y);
}
public static Vector2 operator *(Vector2 a, Vector2 b)
{
return new Vector2(a.X * b.X, a.Y * b.Y);
}
public static Vector2 operator *(Vector2 a, float b)
{
return new Vector2(a.X * b, a.Y * b);
}
public static Vector2 operator *(float a, Vector2 b)
{
return new Vector2(a * b.X, a * b.Y);
}
public static Vector2 operator /(Vector2 a, Vector2 b)
{
return new Vector2(a.X / b.X, a.Y / b.Y);
}
public static Vector2 operator /(Vector2 a, float b)
{
return new Vector2(a.X / b, a.Y / b);
}

public static float Cross(Vector2 a, Vector2 b)
{
return a.X * b.Y - a.Y * b.X;
}
public static float Dot(Vector2 a, Vector2 b)
{
return a.X * b.X + a.Y * b.Y;
}
}