From 839ff77b594142b3a4829c85766e76e42cf4006d Mon Sep 17 00:00:00 2001 From: Kister Hakusan <2753888203@qq.com> Date: Wed, 17 Sep 2025 09:49:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Lesson22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C#核心/C#核心.sln | 30 ++++++ .../Lesson22_面向对象相关-万物之父中的方法.csproj | 11 +++ .../Program.cs | 99 +++++++++++++++++++ .../Lesson22_面向对象相关-万物之父中的方法练习.csproj | 11 +++ .../Program.cs | 80 +++++++++++++++ 5 files changed, 231 insertions(+) create mode 100644 C#核心/Lesson22_面向对象相关-万物之父中的方法/Lesson22_面向对象相关-万物之父中的方法.csproj create mode 100644 C#核心/Lesson22_面向对象相关-万物之父中的方法/Program.cs create mode 100644 C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Lesson22_面向对象相关-万物之父中的方法练习.csproj create mode 100644 C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Program.cs diff --git a/C#核心/C#核心.sln b/C#核心/C#核心.sln index 316178c..c591175 100644 --- a/C#核心/C#核心.sln +++ b/C#核心/C#核心.sln @@ -43,6 +43,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson19_多态-接口", "L EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson19_多态-接口练习", "Lesson19_多态-接口练习\Lesson19_多态-接口练习.csproj", "{D511EDF3-7769-45BB-8304-3081918FA633}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson20_多态-密封方法", "Lesson20_多态-密封方法\Lesson20_多态-密封方法.csproj", "{9F2767ED-D9FE-97EB-0B0D-0A8B46435FA3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson21_面向对象相关-命名空间", "Lesson21_面向对象相关-命名空间\Lesson21_面向对象相关-命名空间.csproj", "{6445CCF9-8002-CF07-83FE-0CEE784342B1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson21_面向对象相关-命名空间练习", "Lesson21_面向对象相关-命名空间练习\Lesson21_面向对象相关-命名空间练习.csproj", "{25E43CAE-4D61-07A2-5740-781F60FB8531}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson22_面向对象相关-万物之父中的方法", "Lesson22_面向对象相关-万物之父中的方法\Lesson22_面向对象相关-万物之父中的方法.csproj", "{E8C88C85-C2E7-4E6F-BDB1-806CB078EED6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson22_面向对象相关-万物之父中的方法练习", "Lesson22_面向对象相关-万物之父中的方法练习\Lesson22_面向对象相关-万物之父中的方法练习.csproj", "{0AF0A54F-67BE-46A2-B79D-813ACB6A9EF3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -129,6 +139,26 @@ Global {D511EDF3-7769-45BB-8304-3081918FA633}.Debug|Any CPU.Build.0 = Debug|Any CPU {D511EDF3-7769-45BB-8304-3081918FA633}.Release|Any CPU.ActiveCfg = Release|Any CPU {D511EDF3-7769-45BB-8304-3081918FA633}.Release|Any CPU.Build.0 = Release|Any CPU + {9F2767ED-D9FE-97EB-0B0D-0A8B46435FA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F2767ED-D9FE-97EB-0B0D-0A8B46435FA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F2767ED-D9FE-97EB-0B0D-0A8B46435FA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F2767ED-D9FE-97EB-0B0D-0A8B46435FA3}.Release|Any CPU.Build.0 = Release|Any CPU + {6445CCF9-8002-CF07-83FE-0CEE784342B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6445CCF9-8002-CF07-83FE-0CEE784342B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6445CCF9-8002-CF07-83FE-0CEE784342B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6445CCF9-8002-CF07-83FE-0CEE784342B1}.Release|Any CPU.Build.0 = Release|Any CPU + {25E43CAE-4D61-07A2-5740-781F60FB8531}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25E43CAE-4D61-07A2-5740-781F60FB8531}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25E43CAE-4D61-07A2-5740-781F60FB8531}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25E43CAE-4D61-07A2-5740-781F60FB8531}.Release|Any CPU.Build.0 = Release|Any CPU + {E8C88C85-C2E7-4E6F-BDB1-806CB078EED6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E8C88C85-C2E7-4E6F-BDB1-806CB078EED6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E8C88C85-C2E7-4E6F-BDB1-806CB078EED6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E8C88C85-C2E7-4E6F-BDB1-806CB078EED6}.Release|Any CPU.Build.0 = Release|Any CPU + {0AF0A54F-67BE-46A2-B79D-813ACB6A9EF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AF0A54F-67BE-46A2-B79D-813ACB6A9EF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AF0A54F-67BE-46A2-B79D-813ACB6A9EF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AF0A54F-67BE-46A2-B79D-813ACB6A9EF3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/C#核心/Lesson22_面向对象相关-万物之父中的方法/Lesson22_面向对象相关-万物之父中的方法.csproj b/C#核心/Lesson22_面向对象相关-万物之父中的方法/Lesson22_面向对象相关-万物之父中的方法.csproj new file mode 100644 index 0000000..990f65a --- /dev/null +++ b/C#核心/Lesson22_面向对象相关-万物之父中的方法/Lesson22_面向对象相关-万物之父中的方法.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson22_面向对象相关_万物之父中的方法 + enable + enable + + + diff --git a/C#核心/Lesson22_面向对象相关-万物之父中的方法/Program.cs b/C#核心/Lesson22_面向对象相关-万物之父中的方法/Program.cs new file mode 100644 index 0000000..2007a61 --- /dev/null +++ b/C#核心/Lesson22_面向对象相关-万物之父中的方法/Program.cs @@ -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 + + } + } +} diff --git a/C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Lesson22_面向对象相关-万物之父中的方法练习.csproj b/C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Lesson22_面向对象相关-万物之父中的方法练习.csproj new file mode 100644 index 0000000..e4dd442 --- /dev/null +++ b/C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Lesson22_面向对象相关-万物之父中的方法练习.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson22_面向对象相关_万物之父中的方法练习 + enable + enable + + + diff --git a/C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Program.cs b/C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Program.cs new file mode 100644 index 0000000..63f745e --- /dev/null +++ b/C#核心/Lesson22_面向对象相关-万物之父中的方法练习/Program.cs @@ -0,0 +1,80 @@ +using System.Xml.Linq; + +namespace Lesson22_面向对象相关_万物之父中的方法练习 +{ + class Player + { + private string name; + private int hp, atk, def, dodge; + + public Player(string name, int hp, int atk, int def, int dodge) + { + this.name = name; + this.hp = hp; + this.atk = atk; + this.def = def; + this.dodge = dodge; + } + public override string ToString() + { + return string.Format("玩家{0},血量{1},攻击力{2},防御力{3},闪避{4}", name, hp, atk, def, dodge); + } + } + class Monster + { + //private int atk, def, hp, skill;//不用成员变量 + public Monster(int atk, int def, int hp, int skill) + { + Atk = atk; + Def = def; + Hp = hp; + Skill = skill; + } + public int Atk//用属性 + { + get; + set; + } + public int Def + { + get; + set; + } + public int Hp + { + get; + set; + } + public int Skill + { + get; + set; + } + + public Monster Clone() + { + return MemberwiseClone() as Monster; + } + public override string ToString() + { + return string.Format("ATK{0},DEF{1},HP{2},SKILL{3}",Atk,Def,Hp,Skill); + } + + } + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + Player p = new Player("张三",100,20,10,5); + Console.WriteLine(p); + Monster m = new Monster(90,50,100,1); + Monster m2 = m.Clone(); + Console.WriteLine(m); + m2.Atk = 200; + m2.Skill = 20; + Console.WriteLine(m); + Console.WriteLine(m2); + } + } +}