WEB开发网
开发学院软件开发C语言 C#中的结构与类 阅读

C#中的结构与类

 2009-03-04 08:17:49 来源:WEB开发网   
核心提示: 由于结构类型是值类型,因而Equals()方法比较的是两个对象的值是否相等,C#中的结构与类(4),如果相等则返回true;而类类型为引用类型,Equals()方法比较的是二者的引用地址(即指针)是否相等,引用地址是相同的,因此不仅动态方法Equals()返回的是true,很显然,clsX

由于结构类型是值类型,因而Equals()方法比较的是两个对象的值是否相等,如果相等则返回true;而类类型为引用类型,Equals()方法比较的是二者的引用地址(即指针)是否相等。很显然,clsX和clsY是两个不同的对象,它们在栈的地址是不相等的。如果修改代码如下:

            ClassPerson clsX = new ClassPerson();
            clsX.LastName = "Bejaoui";
            clsX.FirstName = "Bechir";
            ClassPerson clsY = clsX;
            if (clsX.Equals(clsY))
            {
                Console.WriteLine("clsX = clsY");
            }
            else
            {
                Console.WriteLine("clsX != clsY");

            }//This code displays clsX = clsY

由于是直接将clsX赋值给clsY,因此两个对象的引用地址相等,Equals()方法返回true。

其实对于值类型和引用类型的相等性比较,是一个比较复杂的问题。例如我们可以通过重写Equals()方法增强或修改比较逻辑。重写Equals()方法还必须重写GetHashCode()方法。对于引用类型,还可以使用静态方法ReferenceEquals()方法。此外,还可以重载操作符==。另外,对于String对象,则比较特殊,因为它使用了Immutable模式。虽然String类型是引用类型,但如果直接定义的两个String对象的值相同,由于采用了Immutable模式的原因,这两个对象其实是同一个对象,引用地址是相同的。因此不仅动态方法Equals()返回的是true,且静态方法ReferenceEquals()返回的也是true。

上一页  1 2 3 4 

Tags:结构

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接