C#-objetc中的方法

object:万物之父、所有类的基类、引用类型、可利用里氏替换原则装载一切对象、存在装箱拆箱

一:object中的静态方法:

1.1 Equals()

Equals():判断两个对象是否相等。

最终的判断权,交给左侧对象的Equals方法。即不管值类型引用类型都会按照左侧对象Equals方法的规则来进行比较

class Test{
    public override bool Equals(object obj){
        return base.Equals(obj);
    }
}
--------------------------------------------------
Console.WriteLine(Object.Equals(1, 1));//判断值类型的值是否相等
----------------
Test t = new Test();
Test t2 = new Test();
Console.WriteLine(Object.Equals(t, t2));//判断引用类型的地址是否相等
1.2 ReferenceEquals()

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

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

Console.WriteLine(Object.ReferenceEquals(t, t2));
//代码中的Object可省略。Object是所有类的基类,则可默认所有类中都有该方法

二:object在的成员方法

2.1 GetType()

反射中重要方法。主要用于获取对象运行时的类型Type。

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

Test t = new Test();
Type type = t.GetType();
2.2 MemberwiseClone()

用于获取对象的浅拷贝对象,即返回一个新的对象

注意:新对象中的引用变量会和老对象中一致。

该方法是被保护的,只能在子类中调用

class Test{
    public int i = 1;
    public Test2 t2 = new Test2();

    public Test Clone(){ //该方法是被保护的,只能在子类中调用
        return MemberwiseClone() as Test;
    }
}
class Test2{
        public int i = 2;
}
-------------------------------------------------------------
Test t = new Test();
Test tc = t.Clone();
Console.WriteLine("克隆对象后");
Console.WriteLine("t.i = " + t.i);//1
Console.WriteLine("t.t2.i = " + t.t2.i);//2
Console.WriteLine("tc.i = " + tc.i);//1
Console.WriteLine("tc.t2.i = " + tc.t2.i);//2

tc.i = 20;
tc.t2.i = 21;
Console.WriteLine("改变克隆体信息后");
Console.WriteLine("t.i = " + t.i);//1
Console.WriteLine("t.t2.i = " + t.t2.i);//21原体发生变化,原体和克隆体存储同一地址
Console.WriteLine("tc.i = " + tc.i);//20
Console.WriteLine("tc.t2.i = " + tc.t2.i);//21

三:object中的虚方法

3.1 Equals()

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

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

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

3.1 GetHashCode()

获取对象的哈希码

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

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

3.3 ToString()

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

public override string ToString(){
    return "重写了.ToString()";
}

总结:

1.虚方法 ToString() 自定字符串转换规则

2.成员方法 GetType() 反射相关

3.成员方法 MemberwiseClone() 浅拷贝

4.虚方法 Equals() 自定义判断相等的规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值