operator#
使用
operator
关键字重载内置运算符,或在类或结构声明中提供用户定义的转换。
假设场景,一个Student类,有语文和数学两科成绩,Chinese Math,加减两科成绩,不重载运算,代码如下。
class Student { /// <summary> /// 语文成绩 /// </summary> public double Chinese { get; set; } /// <summary> /// 数学成绩 /// </summary> public double Math { get; set; } }
比较两个成绩差距
var a = new Student { Chinese = 90.5d, Math = 88.5d }; var b = new Student { Chinese = 70.5d, Math = 68.5d }; //a的语文比b的语文高多少分 Console.WriteLine(a.Chinese - b.Chinese); //a的数学比b的数学高多少分 Console.WriteLine(a.Math - b.Math);
使用operator
重载 -
class Student { /// <summary> /// 语文成绩 /// </summary> public double Chinese { get; set; } /// <summary> /// 数学成绩 /// </summary> public double Math { get; set; } public static Student operator -(Student a, Student b) { return new Student { Chinese = a.Chinese - b.Chinese, Math = a.Math - b.Math }; } }
比较成绩差距的代码可以改为
class Program { static void Main(string[] args) { var a = new Student { Chinese = 90.5d, Math = 88.5d }; var b = new Student { Chinese = 70.5d, Math = 68.5d }; var c = a - b; //a的语文比b的语文高多少分 Console.WriteLine(c.Chinese); //a的数学比b的数学高多少分 Console.WriteLine(c.Math); } }
参考:运算符(C# 参考)