添加Lesson22
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<RootNamespace>Lesson22_面向对象相关_万物之父中的方法</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,99 @@
|
||||
namespace Lesson22_面向对象相关_万物之父中的方法
|
||||
{
|
||||
class Test
|
||||
{
|
||||
public int i = 1;
|
||||
public Test2 t2 = new Test2();
|
||||
|
||||
public Test Clone()
|
||||
{
|
||||
return MemberwiseClone() as Test;
|
||||
}
|
||||
|
||||
//public override bool Equals(object obj)
|
||||
//{
|
||||
// if (obj is Test t)
|
||||
// {
|
||||
// return this.i == t.i && this.t2.i == t.t2.i;
|
||||
// }
|
||||
// return false;
|
||||
//}//重写Equals方法 用于比较值是否相等
|
||||
}
|
||||
class Test2
|
||||
{
|
||||
public int i = 2;
|
||||
}
|
||||
internal class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
#region 知识回顾
|
||||
//万物之父object
|
||||
//他是所有类的基类 引用类型
|
||||
//可以用里氏替换原则装载一切对象
|
||||
//存在装箱和拆箱
|
||||
#endregion
|
||||
|
||||
#region 知识点一 object中的静态方法
|
||||
//静态方法
|
||||
//Equals 判断两个对象是否相等
|
||||
//最终的判断权交给最左侧的Equals方法
|
||||
//不管值类型引用类型都会按照左侧Equals方法规则来进行比较
|
||||
Console.WriteLine(Object.Equals(1,1));//返回Ture
|
||||
Test t = new Test();
|
||||
Test t2 = new Test();
|
||||
Console.WriteLine(Equals(t,t2));//false因为地址不同
|
||||
Test t3 = t;
|
||||
Console.WriteLine(Equals(t,t3));//这样才为True
|
||||
//ReferencesEquals
|
||||
//用来哦比较引用类型
|
||||
//值类型对象使用该方法返回的结果永远是false
|
||||
Console.WriteLine(ReferenceEquals(1,1));//false
|
||||
#endregion
|
||||
|
||||
#region 知识点二 object中的成员方法
|
||||
//普通方法
|
||||
//GetType 获取当前对象的类型信息
|
||||
//这是在反射中非常重要的一个方法
|
||||
//通过Type结合反射可以做很多关于对象的操作
|
||||
t = new Test();
|
||||
Type type = t.GetType();
|
||||
//MemberwiseClone
|
||||
//用于获取该对象的浅拷贝对象
|
||||
//口语化的意思就是 克隆一个一模一样的对象
|
||||
//既 新建一个对象 然后把当前对象的值全部赋值给新对象
|
||||
//注意:改后者的引用类型值会影响前者
|
||||
Console.WriteLine("克隆前:");
|
||||
Test tx = t.Clone();
|
||||
Console.WriteLine(t.i);//1
|
||||
Console.WriteLine(t.t2.i);//2
|
||||
Console.WriteLine(tx.i);//1
|
||||
Console.WriteLine(tx.t2.i);//2
|
||||
Console.WriteLine("改变克隆信息后");
|
||||
tx.i = 20;
|
||||
tx.t2.i = 21;
|
||||
Console.WriteLine(t.i);//1
|
||||
Console.WriteLine(t.t2.i);//21新对象中的引用类型成员被改变 原对象也被改变了
|
||||
Console.WriteLine(tx.i);//20
|
||||
Console.WriteLine(tx.t2.i);//21
|
||||
#endregion
|
||||
|
||||
#region 知识点三 object中的虚方法
|
||||
//虚方法Equals
|
||||
//默认实现还是比较两者是否为同一个引用,相当于ReferenceEquals
|
||||
//但是微软在所有值类型的基类System.ValueType中重写了该方法,用来比较值类型的值是否相等
|
||||
|
||||
//虚方法GetHashCode
|
||||
//该方法是获取对象哈希值的一个方法
|
||||
//(一种通过算法算出的,表示唯一对象的编码,不同对象哈希码有可能一样,具体值根据算法决定)
|
||||
//我们可以通过重写该方法来实现我们自己的哈希算法,正常情况下,使用极少,基本不用
|
||||
|
||||
//虚方法ToString
|
||||
//该方法用于返回当前对象代表的字符串信息,可以重写他来定义自己的字符串转换规则
|
||||
//非常常用。当我们调用Console.WriteLine打印一个对象时,实际上调用的就是该对象的ToString方法
|
||||
Console.WriteLine(t);
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user