猿问

在方法中强制转换不同的子类

我想发送,接收和转换SkillEvent类的子类,并能够根据其类型在内部抓取自定义参数。


可能有许多具有不同参数的不同子类。


有没有一种方法可以避免为每种技能编写不同的方法?


class SkillEvent { float timestamp, EventType type }

class GrenadeSkillEvent : SkillEvent { Vector3 target_point}


[ClientRpc]

RpcSendSkillEvent(SkillEvent event){

    eventManager.ExecuteEvent(event);

}


ExecuteEvent(SkillEvent event){

    switch(event.type){

        case GrenadeSkillEvent : 

            GrenadeSkillEvent grenadeEvent = (GrenadeSkillEvent) event;

            float grenadeParam = event.grenadeParam;

            break;


        case OtherSkillEvent : 

            OtherSkillEvent otherEvent = (OtherSkillEvent ) event;

            string stringParam = event.stringParam;

            break;

    }

}

我认为可以这样做,但显然不行。


有没有一种方法可以避免为每种技能编写不同的方法?


紫衣仙女
浏览 137回答 3
3回答

慕的地6264312

最好的方法是在顶级类上编写通用的getter方法,SkillEvent然后在special类中重写该方法。由于您似乎需要不同的类型,因此我认为您可以使用执行您在类内部进行参数化的方法的方法这是您当前代码已发布的示例:class SkillEvent {   float timestamp;   EventType type ;  public virtual void executeEvent(){ //handles the general case for the execute funciton    execute(timestamp);  }}class GrenadeSkillEvent : SkillEvent { //overriden to pass target point into event execution  Vector3 target_point;  public override void executeEvent(){    execute(target_point);  }}class BonusEvent : SkillEvent {   int bonus_health;  public override void executeEvent(){/overriden to pass bonus health into event    execute(bonus_health);  }}class TerrainEvent : SkillEvent {   GameObject obj;  public override void executeEvent(){//overriden to play animation before event is executed    animation(obj);    execute();  }}[ClientRpc]RpcSendSkillEvent(SkillEvent event){    eventManager.ExecuteEvent(event);}ExecuteEvent(SkillEvent event){    event.executeEvent();}
随时随地看视频慕课网APP
我要回答