运算符重载的示例:Vector结构
using System;
namespace 运算符重载
{
class Program
{
static void Main(string[] args)
{
// Console.WriteLine("Hello World!");
// Vector vec1,vec2,vec3;
// vec1 = new Vector(3.0,3.0,1.0);
// vec2 = new Vector(2.0,-4.0,-4.0);
// vec3 = vec1 + vec2;
// System.Console.WriteLine($"vec1 = {vec1}");
// System.Console.WriteLine($"vec2 = {vec2}");
// System.Console.WriteLine($"vec3 = {vec3}");
// double dou = 7;
// Vector vec = new Vector(1.0,2.0,3.0);
// Vector vec2 = dou * vec;
// Vector vec3 = vec * dou;
// System.Console.WriteLine($"{vec2}");
// System.Console.WriteLine($"{vec3}");
Vector vec1,vec2,vec3;
vec1 = new Vector(1.0,1.5,2.0);
vec2 = new Vector(0,0,-10);
//vec3 = vec1 + vec2;
vec3 = vec1 * 2;
System.Console.WriteLine($"vec1 * vec2 = {vec1*vec3}");
}
}
//声明结构(运算符重载用于结构和类时,其工作方式时一样的。)
struct Vector{
public double X{get;}
public double Y{get;}
public double Z{get;}
public Vector(double x,double y,double z){
X = x;
Y = y;
Z = z;
}
public Vector(Vector vector){
X = vector.X;
Y = vector.Y;
Z = vector.Z;
}
public override string ToString()=>$"({X},{Y},{Z})";
//+ 的运算符重载
public static Vector operator + (Vector left,Vector right)=>
new Vector(left.X + right.X,left.Y + right.Y,left.Z + right.Z);
//* 的运算符重载
public static Vector operator *(double left,Vector right)=>
new Vector(left*right.X,left*right.Y,left*right.Z);
public static Vector operator *(Vector left,double right)=>right * left;
//内积
public static double operator *(Vector left,Vector right)=>left.X*right.X+left.Y*right.Y+left.Z*right.Z;
}
}