C# 编程指南:对象的比较和引用

在C#中,对象的比较和引用是涉及对象相等性和引用的概念。

部分
1
对象的比较

C#中有两种方式来比较对象的内容:引用相等性比较和值相等性比较。

引用相等性比较(Reference Equality Comparison):
引用相等性比较使用 == 或 ReferenceEquals() 方法来比较两个对象的引用是否相等。
引用相等性比较基于对象的内存地址,判断两个对象是否指向同一块内存空间。
string str1 = "hello";
string str2 = "hello";
string str3 = string.Copy(str1);

bool referenceEqual = (str1 == str2); // true,引用相等
bool referenceEqual2 = ReferenceEquals(str1, str3); // false,引用不等
值相等性比较(Value Equality Comparison):
值相等性比较使用 Equals() 方法来比较两个对象的值是否相等。
值相等性比较基于对象的内容,判断两个对象的属性或字段是否具有相同的值。
对象需要实现 Equals() 方法来自定义比较规则。
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
            return false;

        Person other = (Person)obj;
        return Name == other.Name && Age == other.Age;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}

Person person1 = new Person { Name = "John", Age = 25 };
Person person2 = new Person { Name = "John", Age = 25 };
Person person3 = new Person { Name = "Alice", Age = 30 };

bool valueEqual = person1.Equals(person2); // true,值相等
bool valueEqual2 = person1.Equals(person3); // false,值不等
部分
2
对象的引用
C#中的对象是通过引用来访问和操作的。
对象引用是指向对象的指针或标识,而不是对象本身。
多个对象引用可以指向同一个对象。
Person person1 = new Person { Name = "John", Age = 25 };
Person person2 = person1; // person2引用指向person1引用的对象

person2.Name = "Alice";

Console.WriteLine(person1.Name); // "Alice",person1和person2引用同一个对象
部分
3
引用类型和值类型
在C#中,引用类型和值类型对于对象的比较和引用有不同的行为。
引用类型(如类)是通过引用访问和传递的,比较的是对象的引用。
值类型(如结构体)是通过值访问和传递的,比较的是对象的值。
// 引用类型的比较
string str1 = "hello";
string str2 = "hello";

bool referenceEqual = (str1 == str2); // true,引用相等

// 值类型的比较
int num1 = 10;
int num2 = 10;

bool valueEqual = (num1 == num2); // true,值相等
    目录

  • 1.
    对象的比较
  • 2.
    对象的引用
  • 3.
    引用类型和值类型