为什么对象需要堆内存?

时间:2015-03-26 07:16:27

标签: c# asp.net class memory

我有一个名为 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

我的问题是为什么对象需要堆内存?

2 个答案:

答案 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 ......