From 8dcaa99ff481980cd3235f29f63c9b10d57b31f6 Mon Sep 17 00:00:00 2001 From: Kister Hakusan <2753888203@qq.com> Date: Wed, 10 Sep 2025 14:43:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Lesson14=E5=92=8CLesson15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C#核心/C#核心.sln | 24 ++++ .../Lesson14_继承-继承中的构造函数.csproj | 11 ++ .../Lesson14_继承-继承中的构造函数/Program.cs | 131 ++++++++++++++++++ .../Lesson14_继承-继承中的构造函数练习.csproj | 11 ++ .../Program.cs | 63 +++++++++ .../Lesson15_继承-万物之父和装箱拆箱.csproj | 11 ++ .../Lesson15_继承-万物之父和装箱拆箱/Program.cs | 97 +++++++++++++ .../Lesson15_继承-万物之父和装箱拆箱练习.csproj | 11 ++ .../Program.cs | 19 +++ 9 files changed, 378 insertions(+) create mode 100644 C#核心/Lesson14_继承-继承中的构造函数/Lesson14_继承-继承中的构造函数.csproj create mode 100644 C#核心/Lesson14_继承-继承中的构造函数/Program.cs create mode 100644 C#核心/Lesson14_继承-继承中的构造函数练习/Lesson14_继承-继承中的构造函数练习.csproj create mode 100644 C#核心/Lesson14_继承-继承中的构造函数练习/Program.cs create mode 100644 C#核心/Lesson15_继承-万物之父和装箱拆箱/Lesson15_继承-万物之父和装箱拆箱.csproj create mode 100644 C#核心/Lesson15_继承-万物之父和装箱拆箱/Program.cs create mode 100644 C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Lesson15_继承-万物之父和装箱拆箱练习.csproj create mode 100644 C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Program.cs diff --git a/C#核心/C#核心.sln b/C#核心/C#核心.sln index da50bb4..364e2dd 100644 --- a/C#核心/C#核心.sln +++ b/C#核心/C#核心.sln @@ -19,6 +19,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson12_继承-继承的 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson13_继承-里氏替换原则练习", "Lesson13_继承-里氏替换原则练习\Lesson13_继承-里氏替换原则练习.csproj", "{B17DEE02-D1AD-460B-8295-DDDE32A0EDA7}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_继承-继承中的构造函数", "Lesson14_继承-继承中的构造函数\Lesson14_继承-继承中的构造函数.csproj", "{DD06D61F-A96A-423A-ADB7-C74D555575AD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_继承-继承中的构造函数练习", "Lesson14_继承-继承中的构造函数练习\Lesson14_继承-继承中的构造函数练习.csproj", "{01D03E15-704A-45B9-8854-2AFBED1BC69F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson15_继承-万物之父和装箱拆箱", "Lesson15_继承-万物之父和装箱拆箱\Lesson15_继承-万物之父和装箱拆箱.csproj", "{E9C8E0F1-E80C-48B8-A049-A3D9719915E1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson15_继承-万物之父和装箱拆箱练习", "Lesson15_继承-万物之父和装箱拆箱练习\Lesson15_继承-万物之父和装箱拆箱练习.csproj", "{FD313E4D-09E3-4310-B001-8BD9BF0B7C45}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,6 +65,22 @@ Global {B17DEE02-D1AD-460B-8295-DDDE32A0EDA7}.Debug|Any CPU.Build.0 = Debug|Any CPU {B17DEE02-D1AD-460B-8295-DDDE32A0EDA7}.Release|Any CPU.ActiveCfg = Release|Any CPU {B17DEE02-D1AD-460B-8295-DDDE32A0EDA7}.Release|Any CPU.Build.0 = Release|Any CPU + {DD06D61F-A96A-423A-ADB7-C74D555575AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD06D61F-A96A-423A-ADB7-C74D555575AD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD06D61F-A96A-423A-ADB7-C74D555575AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD06D61F-A96A-423A-ADB7-C74D555575AD}.Release|Any CPU.Build.0 = Release|Any CPU + {01D03E15-704A-45B9-8854-2AFBED1BC69F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01D03E15-704A-45B9-8854-2AFBED1BC69F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01D03E15-704A-45B9-8854-2AFBED1BC69F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01D03E15-704A-45B9-8854-2AFBED1BC69F}.Release|Any CPU.Build.0 = Release|Any CPU + {E9C8E0F1-E80C-48B8-A049-A3D9719915E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9C8E0F1-E80C-48B8-A049-A3D9719915E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9C8E0F1-E80C-48B8-A049-A3D9719915E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9C8E0F1-E80C-48B8-A049-A3D9719915E1}.Release|Any CPU.Build.0 = Release|Any CPU + {FD313E4D-09E3-4310-B001-8BD9BF0B7C45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD313E4D-09E3-4310-B001-8BD9BF0B7C45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD313E4D-09E3-4310-B001-8BD9BF0B7C45}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD313E4D-09E3-4310-B001-8BD9BF0B7C45}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/C#核心/Lesson14_继承-继承中的构造函数/Lesson14_继承-继承中的构造函数.csproj b/C#核心/Lesson14_继承-继承中的构造函数/Lesson14_继承-继承中的构造函数.csproj new file mode 100644 index 0000000..2943dfb --- /dev/null +++ b/C#核心/Lesson14_继承-继承中的构造函数/Lesson14_继承-继承中的构造函数.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson14_继承_继承中的构造函数 + enable + enable + + + diff --git a/C#核心/Lesson14_继承-继承中的构造函数/Program.cs b/C#核心/Lesson14_继承-继承中的构造函数/Program.cs new file mode 100644 index 0000000..3a4a882 --- /dev/null +++ b/C#核心/Lesson14_继承-继承中的构造函数/Program.cs @@ -0,0 +1,131 @@ +namespace Lesson14_继承_继承中的构造函数 +{ + #region 知识回顾 + //构造函数 + //实例化对象时调用的函数 + //主要用来初始化成员变量 + //每个类都会有一个默认的无参构造函数 + + //语法 + //访问修饰符 类名() + //{ + // 初始化语句 + //} + //不写返回值 + //函数名和类名相同 + //访问修饰符根据需求决定,一般为public + //构造函数可以重载 + //可以用this语法重用代码 + + //注意 + //有参构造会顶掉无参构造 + //需要重新声明无参构造 + class Test + { + public int testI; + public string testStr; + public Test() + { + + } + + public Test(int i) + { + this.testI = i; + } + public Test(int i, string str) : this(i)//复用上方public Test(int i) + { + this.testStr = str; + } + } + #endregion + + #region 知识点一 基本概念 + //特点 + //当声明一个子类对象时 + //先执行父类的构造函数 + //再执行子类的构造函数 + + //注意: + //1.父类的无参构造 很重要 + //2.子类可以通过base关键字 代表父类 调用父类构造 + #endregion + + #region 知识点二 继承中构造函数的执行顺序 + //父类的父类的构造->...父类构造->...->子类构造 + class GameObject + { + public GameObject() { + Console.WriteLine("gameobject的构造函数"); + } + } + class Player : GameObject + { + public Player() + { + Console.WriteLine("player的构造函数"); + } + } + class MainPlayer : Player + { + public MainPlayer() + { + Console.WriteLine("mainplayer的构造函数"); + } + } + #endregion + + #region 知识点三 父类的无参构造函数很重要 + //子类实例化时默认调用的父类无参构造,如果父类无参被顶掉会报错 + //class Father + //{ + // public Father(int i)//用有参把无参构造顶了 + // { + // Console.WriteLine("father的构造"); + // } + //} + //class Son: Father//无参构造函数被顶导致无法正确调用父类构造函数 + //{ + // public Son() + // { + // Console.WriteLine("son"); + // } + //} + #endregion + + #region 知识点四 通过base调用指定父类构造 + class Father + { + public Father(int i)//用有参把无参构造顶了 + { + Console.WriteLine("father的构造,参数i的值{0}",i); + } + } + class Son : Father + { + + public Son(int i):base(i)//用base来传给父类构造函数一个值 + { + Console.WriteLine("son 1,参数i的值{0}", i); + } + + public Son(int i, int j) : this(i)//用this来调用上一个public Son(int i):base(i)继而用base来传给父类构造函数一个值 + { + Console.WriteLine("son 2,参数i的值{0}", i); + } + } + #endregion + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + MainPlayer mp = new MainPlayer(); + + Console.WriteLine(); + Console.WriteLine(); + + Son s = new Son(1,2); + } + } +} diff --git a/C#核心/Lesson14_继承-继承中的构造函数练习/Lesson14_继承-继承中的构造函数练习.csproj b/C#核心/Lesson14_继承-继承中的构造函数练习/Lesson14_继承-继承中的构造函数练习.csproj new file mode 100644 index 0000000..699f54f --- /dev/null +++ b/C#核心/Lesson14_继承-继承中的构造函数练习/Lesson14_继承-继承中的构造函数练习.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson14_继承_继承中的构造函数练习 + enable + enable + + + diff --git a/C#核心/Lesson14_继承-继承中的构造函数练习/Program.cs b/C#核心/Lesson14_继承-继承中的构造函数练习/Program.cs new file mode 100644 index 0000000..5f69431 --- /dev/null +++ b/C#核心/Lesson14_继承-继承中的构造函数练习/Program.cs @@ -0,0 +1,63 @@ +namespace Lesson14_继承_继承中的构造函数练习 +{ + class Worker + { + public string job; + public string content; + + public Worker(string job, string content) + { + this.job = job; + this.content = content; + } + + public void Work() + { + Console.WriteLine("{0}做了{1}",job,content); + } + } + class Programer : Worker + { + public Programer() : base("程序员", "编程") + { + Console.WriteLine("调用了Programer无参构造"); + } + } + class Plan : Worker + { + public Plan() : base("策划", "设计游戏") + { + Console.WriteLine("调用了Plan无参"); + } + } + class Art : Worker + { + public Art() : base("美术", "美术设计") + { + Console.WriteLine("调用了Art的无参构造"); + } + public void testArt() + { + Console.WriteLine("调用了testArt测试函数"); + } + } + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + Programer programer = new Programer(); + programer.Work(); + + Worker art = new Art(); + art.Work(); + + Console.WriteLine(art is Programer); + Console.WriteLine(art is Art); + Console.WriteLine(art is Worker); + + Art test = art as Art; + test.testArt(); + } + } +} diff --git a/C#核心/Lesson15_继承-万物之父和装箱拆箱/Lesson15_继承-万物之父和装箱拆箱.csproj b/C#核心/Lesson15_继承-万物之父和装箱拆箱/Lesson15_继承-万物之父和装箱拆箱.csproj new file mode 100644 index 0000000..dd29f85 --- /dev/null +++ b/C#核心/Lesson15_继承-万物之父和装箱拆箱/Lesson15_继承-万物之父和装箱拆箱.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson15_继承_万物之父和装箱拆箱 + enable + enable + + + diff --git a/C#核心/Lesson15_继承-万物之父和装箱拆箱/Program.cs b/C#核心/Lesson15_继承-万物之父和装箱拆箱/Program.cs new file mode 100644 index 0000000..d8056f4 --- /dev/null +++ b/C#核心/Lesson15_继承-万物之父和装箱拆箱/Program.cs @@ -0,0 +1,97 @@ +namespace Lesson15_继承_万物之父和装箱拆箱 +{ + #region 里氏替换原则知识点回顾 + //概念:父类容器装子类对象 + //作用:方便进行对象存储和管理 + //使用 + //is和as + //is用于判断 + //as用于转换 + class Father + { + + } + class Son : Father + { + public void Speak() + { + Console.WriteLine("Son.Speak()"); + } + } + #endregion + + #region 知识点一 万物之父 + //万物之父 + //关键字Object + //概念 + //object时所有类型的积累,他是一个类(引用类型) + //作用: + //1.可以利用里氏替换原则,用object容器装所有对象 + //2.可以用来表示不确定类型,作为函数参数类型 + #endregion + internal class Program + { + + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + + #region 知识点二 万物之父的使用 + Father f = new Son(); + if (f is Son) + { + (f as Son).Speak(); + } + + //引用类型 + object o = new Son(); + o = f; + //用is和as来判断和转换即可 + if(o is Son) + { + (o as Son).Speak(); + } + + //值类型 + object o2 = 1f; + //用强转 + float fl = (float)o2; + Console.WriteLine(o2); + + //特殊的string类型 + object str = "123"; + string str2 = str.ToString(); + string str3 = str as string; + Console.WriteLine(str2+str3); + + //数组 + object arr = new int[10]; + int[] ar = arr as int[]; + + #endregion + + #region 知识点三 装箱拆箱 + //发生条件 + //用objcet存值类型(装值) + //再把object转为值类型(拆箱) + + //装箱 + //把值类型用引用类型存储 + //栈内存会迁移到堆内存中 + + //拆箱 + //把引用类型存储的值类型取出来 + //堆内存会迁移到栈内存中 + + //好处:不确定类型时可以方便参数的存储和传递 + //坏处:存在内存迁移,增加性能消耗 + #endregion + Test2(1, 2, 3, 4); + } + #region 知识点四 无敌知识点 + //在使用变长传值时,如果不知道会传什么进去的时候就可以用object来存储 + static void Test(params int[] array) { }//这个方法只能获取int类型 + static void Test2(params object[] array) { }//这样就可以存任意长度任意类型的参数进来了 + #endregion + } +} diff --git a/C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Lesson15_继承-万物之父和装箱拆箱练习.csproj b/C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Lesson15_继承-万物之父和装箱拆箱练习.csproj new file mode 100644 index 0000000..fd7fde6 --- /dev/null +++ b/C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Lesson15_继承-万物之父和装箱拆箱练习.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson15_继承_万物之父和装箱拆箱练习 + enable + enable + + + diff --git a/C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Program.cs b/C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Program.cs new file mode 100644 index 0000000..24f8a54 --- /dev/null +++ b/C#核心/Lesson15_继承-万物之父和装箱拆箱练习/Program.cs @@ -0,0 +1,19 @@ +namespace Lesson15_继承_万物之父和装箱拆箱练习 +{ + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + //用代码演示拆箱装箱 + + //装箱 + int i = 10; + object o1 = i; + + //拆箱 + object o2 = o1; + int i2 = (int)o2; + } + } +}