c#万物之父

一 万物之父的静态方法

1静态方法Equals

判断两个对象是否相等

不管值类型引用都会按照左侧对象Equals方法的规则来进行比较

引用类型比较的是两个对象指向地址是否一样

cs 复制代码
 Console.WriteLine(Object.Equals(1,1));//相等
 Test t = new Test();
 Test tt2 = new Test();
 Test t3 = t;
 Console.WriteLine(Object.Equals(t, tt2));//不相等
 Console.WriteLine(Object.Equals(t, t3));//相等

2 静态方法ReferenceEquals

比较两个对象是否是相同的引用,主要是用来比较引用类型的对象

值类型对象返回值始终是false

cs 复制代码
 Console.WriteLine(Object.ReferenceEquals(t, tt2));//不相等

二object中的成员方法

1普通方法GetType

该方法在反射相关知识点中是非常重要的方法,之后我们会具体的讲解这里返回的Type类型

该方法的主要作用就是获取对象运行时的类型Type

通过Type结合反射相关知识点可以做很多关于对象的操作

cs 复制代码
 Test t4 = new Test();
 Type type = t.GetType();

2普通方法MemberwiseClone

该方法用于获取对象的浅拷贝对象,口语化的意思就是会返回一个新的对象

但是新对象中的引用变量会和老对象中一致。

创建一个新对象,然后将当前对象的所有非静态字段复制到新对象。字段的复制规则取决于字段的类型:

如果字段是值类型,则对该字段执行逐位复制(bit - by - bit copy),即复制字段的完整内容。

如果字段是引用类型,则复制的是引用(内存地址),而不是引用所指向的对象本身。

因此,原始对象和副本中的引用类型字段将指向同一个对象。

这种复制方式称为浅拷贝。

cs 复制代码
 class Test
 {
     public int i = 1;
     public Test2 t2 = new Test2();
     public Test Clone()
     {
         return MemberwiseClone() as Test;//返回一个自己的克隆体
     }
     public override string ToString()
     {
     return "fly";
     }
}
Test t2 = t.Clone();
Console.WriteLine("克隆对象后");
Console.WriteLine("t.i="+t.i);
Console.WriteLine("t.t2.i=" + t.t2.i);
Console.WriteLine("t2.i="+t2.i);
Console.WriteLine("t2.t2.i="+t2.t2.i);

t2.i = 20;
t2.t2.i = 21;

Console.WriteLine("改变克隆体信息后");
Console.WriteLine("t.i=" + t.i); //1
Console.WriteLine("t.t2.i=" + t.t2.i); //21
Console.WriteLine("t2.i=" + t2.i); //20
Console.WriteLine("t2.t2.i=" + t2.t2.i); //21

三 object中的虚方法

虚方法Equals

默认实现还是比较两者是否为同一个引用,即相当于ReferenceEquals

但是微软在所有值类型的基础System.ValueType中重写了方法,用来比较值相等

我们也可以重写该方法,定义自己的比较相等的规则

虚方法GetHashCode

该方法是获取对象的哈希码

一种通过算法算出的,表示对象的唯一编码,不同对象哈希码有可能一样,具体根据

我们可以通过重写该函数来自己定义对象的哈希码算法,正常情况下,我们使用的极少。

虚方法ToString

该方法返回当前对象代表的字符串,我们可以重写它定义我们自己的对象转字符串规则

该方法非常常用,当我们调用该方法时,默认使用的就是对象的ToString方法后打印出来的内容

cs 复制代码
Console.WriteLine(t);//fly
相关推荐
xiaoshuaishuai82 小时前
C# Chrome安全机制解析
开发语言·visualstudio·c#
游乐码2 小时前
c#字符串函数
开发语言·c#
yaoxin5211232 小时前
375. Java IO API - 列出目录内容
java·开发语言·python
LlNingyu2 小时前
什么是Go的接口(一)
开发语言·后端·golang
小陈工2 小时前
2026年4月5日技术资讯洞察:AI商业模式变革、知识管理革命与开源生态反击
开发语言·人工智能·python·安全·oracle·开源
MinterFusion2 小时前
Java后端高频术语表
java·开发语言·后端·程序员·大厂面试·术语
sycmancia2 小时前
Qt——计算器示例(用户界面与业务逻辑的分离)
开发语言·qt·ui
专注VB编程开发20年2 小时前
delphi死嗑Pascal冷门编程语言,Borland不认可 “通用多语言 IDE”,认为 “专有语言才是护城河”
开发语言·ide·delphi
hzxpaipai2 小时前
外贸网站制作:为何派迪科技做的网站性能与打开速度如此不错?
开发语言·前端·网络·科技·安全