我有一个名为 class1
的课程public class class1
{
public int property1;
public int property2;
public int property3;
}
有两个Same类的对象具有相同的数据类型和值(obj1和obj2具有相同的类型 class1 且具有相同的值)
class1 obj1 = new class1();
obj1.property1 = 12;
obj1.property2 = 0;
obj1.property3 = 18;
class1 obj2 = new class1();
obj2.property1 = 12;
obj2.property2 = 0;
obj2.property3 = 18;
这里我想比较 class1 的对象,但这个条件总是返回false
if (obj1 == obj2)
{
}
else
{
}
经过研究后我发现这是由于值类型和引用类型A Value Type holds the data within its own memory allocation and a Reference Type contains a pointer to another memory location that holds the real data
我的问题是为什么对象需要堆内存?
答案 0 :(得分:0)
您无法比较这两个对象。如果要比较两个对象,则必须实现IEquatable<T>
接口。
另请注意,所有变量都是引用类型(即您的类)的成员,因此它们都将在堆上。您应该了解堆用于存储数据,其中存储数据的生命周期无法提前预测。
另请阅读描述它的article。
答案 1 :(得分:0)
if (obj1 == obj2)
您正在比较引用类型,它将返回false,因为它比较2指针。
如果您想使用此运算符,请实现IComparable<class1>
和这些方法:
public class Class1 : IComparable<Class1> {
public static bool operator ==(Class1 a, Class1 b) {
//define when a == b, compare property1, 2, ect...
}
public static bool operator !=(Class1 a, Class1 b){
//define when a != b, compare property1, 2, ect...
}
}
您可以定义如何通过此运算符比较此类。例如:比较property1,property2,ect ......