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);
+ }
+ }
+}