From 9ed64928cc65409b45ce195d08d83ae774f6431f Mon Sep 17 00:00:00 2001 From: Kister Hakusan <2753888203@qq.com> Date: Thu, 18 Sep 2025 22:47:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Lesson26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C#核心/C#核心.sln | 6 +++ .../Lesson26_面向对象相关-抽象类.csproj | 11 +++++ .../Lesson26_面向对象相关-抽象类/Program.cs | 44 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 C#核心/Lesson26_面向对象相关-抽象类/Lesson26_面向对象相关-抽象类.csproj create mode 100644 C#核心/Lesson26_面向对象相关-抽象类/Program.cs diff --git a/C#核心/C#核心.sln b/C#核心/C#核心.sln index 2ecf6cf..8570922 100644 --- a/C#核心/C#核心.sln +++ b/C#核心/C#核心.sln @@ -63,6 +63,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson24_面向对象相关 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson25_面向对象相关-结构体和类的区别", "Lesson25_面向对象相关-结构体和类的区别\Lesson25_面向对象相关-结构体和类的区别.csproj", "{1CDBD964-7239-4839-8D7A-7E0DDE80CB53}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson26_面向对象相关-抽象类", "Lesson26_面向对象相关-抽象类\Lesson26_面向对象相关-抽象类.csproj", "{6B430E08-CD93-47CD-B506-3ADC3E554FE3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -189,6 +191,10 @@ Global {1CDBD964-7239-4839-8D7A-7E0DDE80CB53}.Debug|Any CPU.Build.0 = Debug|Any CPU {1CDBD964-7239-4839-8D7A-7E0DDE80CB53}.Release|Any CPU.ActiveCfg = Release|Any CPU {1CDBD964-7239-4839-8D7A-7E0DDE80CB53}.Release|Any CPU.Build.0 = Release|Any CPU + {6B430E08-CD93-47CD-B506-3ADC3E554FE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B430E08-CD93-47CD-B506-3ADC3E554FE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B430E08-CD93-47CD-B506-3ADC3E554FE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B430E08-CD93-47CD-B506-3ADC3E554FE3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/C#核心/Lesson26_面向对象相关-抽象类/Lesson26_面向对象相关-抽象类.csproj b/C#核心/Lesson26_面向对象相关-抽象类/Lesson26_面向对象相关-抽象类.csproj new file mode 100644 index 0000000..f220b14 --- /dev/null +++ b/C#核心/Lesson26_面向对象相关-抽象类/Lesson26_面向对象相关-抽象类.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + Lesson26_面向对象相关_抽象类 + enable + enable + + + diff --git a/C#核心/Lesson26_面向对象相关-抽象类/Program.cs b/C#核心/Lesson26_面向对象相关-抽象类/Program.cs new file mode 100644 index 0000000..5c2824f --- /dev/null +++ b/C#核心/Lesson26_面向对象相关-抽象类/Program.cs @@ -0,0 +1,44 @@ +namespace Lesson26_面向对象相关_抽象类 +{ + internal class Program + { + static void Main(string[] args) + { + #region 知识回归 + //抽象类和抽象方法 + //abstract修饰的类和方法 + //抽象类不能实例化 + //抽方法只能在抽象方法种声明 + + //接口 + //interface 自定义类型 + //是行为的抽象 + //不包含成员变量 + //仅保护你方法、属性、索引器、时间,成员都不能被实例化,建议不屑访问修饰符,默认public + #endregion + + #region 知识点一 相同点 + //1.都可以被继承 + //2.都不能直接实例化 + //3.都可以包含方法声明 + //4.子类必须实现未实现的方法 + //5.都遵循里氏替换原则 + #endregion + + #region 知识点二 区别 + //1.抽象类可以有构造函数,接口不能 + //2.抽象类只能被单一继承,接口可以被继承多个 + //3.抽象类种可以有成员变量,接口不能 + //4.抽象类种可以声明成员方法,虚方法,抽象方法,接口只能声明成员方法 + //5.抽象类方法可以使用访问修饰符,接口中建议不屑,默认public + #endregion + + #region 如何选择抽象类和接口 + //表示对象的用抽象类,表示行为拓展的用接口 + //不同对象拥有的共同行为,往往可以使用接口来实现 + //举个例子: + //动物是一类对象,我们自然会选择抽象类;二飞翔是一个行为,我们自然会选择接口 + #endregion + } + } +}