添加Lesson14和Lesson15
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<RootNamespace>Lesson14_继承_继承中的构造函数</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user