class Program { static void Main(string[] args) { A a = new A(); A b = new A(); a.Age = 10; b.Age = 10; Console.WriteLine(a == b);//true Console.WriteLine("kaishi"); MyGenirc<int> myGenirc1 = new MyGenirc<int>(); MyGenirc<int> myGenirc2 = new MyGenirc<int>(); myGenirc1.Age = 10; myGenirc2.Age = 10; Console.WriteLine(myGenirc1 == myGenirc2);//true Console.WriteLine(BiJiao(myGenirc1,myGenirc2));//false Console.ReadKey(); } static bool BiJiao<T>(T a, T b) where T:class { return a == b; } } public class A { public int Age { get; set; } public static bool operator ==(A a1, A a2) { if (a1.Age == a2.Age) { return true; } return false; } public static bool operator !=(A a1, A a2) { if (a1.Age == a2.Age) { return false; } return true; } } public class MyGenirc<T> { public int Age { get; set; } public static bool operator ==(MyGenirc<T> a1, MyGenirc<T> a2) { if (a1.Age == a2.Age) { return true; } return false; } public static bool operator !=(MyGenirc<T> a1, MyGenirc<T> a2) { if (a1.Age == a2.Age) { return false; } return true; } }
第一执行结果为true是因为重载比较
第二个执行结果为true是因为执行了重载比较
第二个执行结果为false是因为编译器不知道,泛型实参是否进行了重载操作符==,比较得是引用