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时,这是一个问题,它需要在我的状态机中使用特定的方法(即在覆盖的协同程序完成之前和之后调用检查标志)。