C# 正确使用继承

C# 正确使用继承,c#,inheritance,C#,Inheritance,这对我来说很难解释,但我会尽力解释情况。 我有两节课介绍状态和状态_eposode1介绍状态继承自状态_eposode1。我正在创建许多调用Start()的State\u eposode1派生类,但我希望每个派生类都调用自己的自定义mystartcroutine()方法,因此当调用基Start()方法时,它将调用派生的自定义方法。有没有一种简单的方法可以做到这一点,或者我应该简单地为每个派生类复制粘贴Start()方法 当我试图调用startcroutine(mystartcroutine())

这对我来说很难解释,但我会尽力解释情况。 我有两节课<代码>介绍状态和
状态_eposode1
<代码>介绍状态继承自
状态_eposode1
。我正在创建许多调用
Start()
State\u eposode1
派生类,但我希望每个派生类都调用自己的自定义
mystartcroutine()
方法,因此当调用基
Start()
方法时,它将调用派生的自定义方法。有没有一种简单的方法可以做到这一点,或者我应该简单地为每个派生类复制粘贴Start()方法

当我试图调用
startcroutine(mystartcroutine())
时,下面的代码抛出了一个错误“No coroutine started”:


在基类中使用
virtual
将基类方法标记为可重写:

public virtual IEnumerator MyStartCoroutine()
{
    Debug.Log("no coroutine started");
    yield return new WaitForSeconds(1);
}
并在派生方法上使用
override
而不是
new
,以指示对基本方法的重写:

public override IEnumerator MyStartCoroutine()
{
    return base.MyStartCoroutine();
}

new
创建独立于基类方法的“新”方法
override
告诉运行时使用派生方法而不是基方法。

在基类中使用
virtual
将基方法标记为可重写:

public virtual IEnumerator MyStartCoroutine()
{
    Debug.Log("no coroutine started");
    yield return new WaitForSeconds(1);
}
并在派生方法上使用
override
而不是
new
,以指示对基本方法的重写:

public override IEnumerator MyStartCoroutine()
{
    return base.MyStartCoroutine();
}

new
创建独立于基类方法的“新”方法
override
告诉运行时使用派生方法而不是基本方法。

您的问题是什么,您希望实现什么?实际上,使用
virtual
override
关键字将有助于您在基类中添加
virtual
关键字,在派生类中您可以使用
override
即使您正确地进行了重写,派生方法也只调用了基类方法,因此我根本看不到派生方法的一点。您期望有什么不同的行为?仅就您的信息而言,当我尝试使用StartRoutines时,这是一个问题,它需要在我的状态机中使用特定的方法(即在覆盖的协同程序完成之前和之后调用检查标志)。您的问题是什么,您希望实现什么?实际上,使用
virtual
override
关键字将有助于您在基类中添加
virtual
关键字,在派生类中您可以使用
override
即使您正确地进行了重写,派生方法也只调用了基类方法,因此我根本看不到派生方法的一点。您期望有什么不同的行为?仅为您提供信息,当我尝试使用StartRoutines时,这是一个问题,它需要在我的状态机中使用特定的方法(即在覆盖的协同程序完成之前和之后调用检查标志)。