添加Lesson26
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<RootNamespace>Lesson26_面向对象相关_抽象类</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user