object类内存在多个成员方法,各自有不同的作用,具体如下:
cs
namespace ConsoleApp15
{
class Test
{
public int i = 1;
public Test2 t2 = new Test2();
//MemberwiseClone()在object类内为protected类型,在子类里公有化重写后返回对应的Test克隆对象
public Test Clone()
{
return MemberwiseClone() as Test;
}
public override string ToString()
{
return "自定义ToString函数";
}
}
class Test2
{
public int i = 2;
}
class Program
{
static void Main(string[] args)
{
//静态方法
//Equals()用于比较两个值类型或引用类型之间是否等同
Console.WriteLine(object.Equals(1, 1));
Test t = new Test();
Test tEquals = new Test();
Console.WriteLine(object.Equals(t, tEquals));
//ReferenceEquals()用于比较引用类型对象之间是否等同(是否指向同一个引用)
Console.WriteLine(ReferenceEquals(t,tEquals));
//成员方法
//GetType()用于获取对象运行时的类型
Test t3 = new Test();
Type type = t3.GetType();
//MemberwiseClone()用于获取对象的浅拷贝对象,浅拷贝对象中的引用变量与原对象一致
Test tClone = t.Clone();//在Test类里采用public方法调用MemberwiseClone()
Console.WriteLine("t.i =" + t.i);
Console.WriteLine("t.t2.i =" + t.t2.i);
Console.WriteLine("tClone.i =" + tClone.i);
Console.WriteLine("tClone.t2.i =" + tClone.t2.i);
tClone.i = 20;
tClone.t2.i = 21;
Console.WriteLine("t.i =" + t.i);
Console.WriteLine("t.t2.i =" + t.t2.i);
Console.WriteLine("tClone.i =" + tClone.i);
Console.WriteLine("tClone.t2.i =" + tClone.t2.i);
/*
总结来说,就是利用克隆方法返回的浅拷贝对象,当该浅拷贝对象
中的值类型变量发生变化后,不会影响原本被克隆对象中的对应变量
而浅拷贝对象中的引用类型发生变化后,原对象中的引用类型也随之改变
*/
//虚方法
//虚方法Equals()用于比较引用类型之间的等同,允许被自定义修改
//虚方法GetHashCode()用于返回对象的哈希码,允许自定义重写哈希算法
//虚方法ToString()返回对象当前代表的字符串,默认返回命名空间名.类名,允许自定义
Random r= new Random();
Console.WriteLine(r);
Console.WriteLine(t);//自定义ToString()函数
}
}
}