C#核心(21)万物之父Object中的方法
前言
我们在先前已经学习过关于万物之父object的相关知识点,当时我们是和装箱拆箱合并在一起进行讲解的,现在我们就来对object里的方法进行一步讲解。
首先既然object里有方法,那么他肯定是类或者结构体。
我们在vs2022中输入objcet,然后鼠标对准object按下f12,可以看到这样一个界面。
我们可以看到,这是一个在system命名空间下的一个类,他的里面有一些这样那样的方法,具体是怎么使用呢。不急,我们一个个来讲。
1.静态方法
静态方法:Equals
作用 :判断两个对象是否相等
他的根本工作逻辑其实是判断两个对象的引用地址是否一样,最终的判断权,交给左侧对象的equals方法,不管值类型还是引用类型都会按照左侧对象Equals方法来进行比较。
后面还有一个同名的虚方法,需要甄别,一个是obejct用来比较两个参数的,一个是子类点出来比较实用的。
然后我们看个例子,顺便复习你也可以在脑海中复习一下引用类型和值类型的区别。
using System;
public class Person
{
public string Name;
public int Age;
}
class Program
{
static void Main(string[] args)
{
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = new Person { Name = "Alice", Age = 30 };
Person person3 = person1; // 引用相同的对象
bool areEqual5 =true;
// 使用Object.Equals方法比较对象
bool areEqual1 = Object.Equals(person1, person2); // false,引用不同
bool areEqual2 = Object.Equals(person1, person3); // true,引用相同
bool areEqual3 = Object.Equals(person1, null); // false,person1不是null
bool areEqual4 = Object.Equals(1, 1); // true,两个都是1,equals才能判断
if(person1!=null)
{
areEqual5 = person1.Equals(person2);//false,展示使用方法
}
// 输出结果
Console.WriteLine($"person1 和 person2 相等: {areEqual1}");
Console.WriteLine($"person1 和 person3 相等: {areEqual2}");
Console.WriteLine($"person1 和 null 相等: {areEqual3}");
Console.WriteLine($"1 和 1 相等: {areEqual4}");
}
}
静态方法:ReferenceEquals
作用:主要用来比较是否是相同的引用,主要用来比较引用类型的对象
他其实和Eqauls虚方法差别不大,都是检查引用类型的,但是其实这里有一点细微的区别,Equals虚方法是可以重写的,但是RederenceEquals是不支持的。而且Equals虚方法本身的比较逻辑也比ReferenceEquals要精细一些