我有一个叫做Party函数的类,它被调用OnMemberDeath().我已经创建了一个名为PlayerParty继承的新类Party,现在我只需要向OnMemberDeath( )函数添加两个但非常重要的行(下面的示例).是否可以仅覆盖部分方法?
派对类负责检测回合制战斗物.此外,每个缔约方都有成员(实体)和SelectionOrb(他们下面的小圈子).当一方成员去世时,必须选择新成员.通过成员选择过程,SelectionOrb必须接收新的父(AdjustWorldObject())以及必须分配对所选成员的引用(对于战斗内容).如果没有剩下活动成员,我们需要设置parent,null以便SelectionOrb不会与Member对象一起删除.
在PlayerParty类中有新对象,即CombatUI,它的作用与SelectionOrb基本相同(必须在当前死亡后接收新的父对象).希望这很清楚:).
/** in Party class **/
protected void OnMemberDeath( )
{
if( aliveCount > 1 )
{
AdjustWorldObject( );
aliveCount--;
}
else
{
ResetWorldObject( );
if( OnPartyDeath != null ) OnPartyDeath( ); // Event
else print( "Party died but event had no subscriptions!" );
}
}
/** in PlayerParty class **/
new void OnMemberDeath( )
{
if( aliveCount > 1 )
{
AdjustWorldObject( );
AdjustCombatUI( ); // The first line I want to add
}
else
{
ResetWorldObject( );
ResetCombatUI( ); // The second line I want to add
if( OnPartyDeath != null ) OnPartyDeath( ); // Event
else print( "Party died but event had no subscriptions!" );
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以仅覆盖部分方法?
不,这是不可能的.您需要将需要重写的函数部分提取到新virtual方法中.
例如,如果您的AdjustWorldObject和ResetWorldObject仅通过此方法调用,则可以将它们设置为虚拟并在需要时覆盖,如下所示
class Party
{
protected void OnMemberDeath( )
{
if(aliveCount > 1)
{
AdjustWorldObject();
aliveCount--;
}
else
{
ResetWorldObject();
if(OnPartyDeath != null) OnPartyDeath(); // Event
else print( "Party died but event had no subscriptions!" );
}
}
protected virtual void AdjustWorldObject()
{
// ...
}
protected virtual void ResetWorldObject()
{
// ...
}
}
class PlayerParty : Party
{
protected override void AdjustWorldObject()
{
base.AdjustWorldObject();
AdjustCombatUI();
}
protected override void ResetWorldObject()
{
base.ResetWorldObject();
ResetCombatUI();
}
}
Run Code Online (Sandbox Code Playgroud)
如果不是,您可以创建类似的专用虚拟方法.
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |