2017-02-25 4 views
2
public class Schedule_Action : MonoBehaviour 
    { 
     public List<Action> mondaySchedule = new List<Action>(); 
     public virtual List<Action> MondaySchedule 
     { 
      get { return mondaySchedule; } 
     } 
    } 

public class Schedule_ActionHire : Schedule_Action 
{ 
    //causes an error here saying it should match overriden with Action 
    public override List<Action_Adventure> MondaySchedule 
    { 
     get 
     { 
      return mondaySchedule.Cast<Action_Adventure>().ToList(); 
     } 
    } 
} 

'Action_Adventure'は 'Action'の子です。ミュータレータリストをオーバーライドしてその子のタイプを変更する

エラーを回避する手段はありますか?または、上記のコードと同じロジックを持つ別の方法ですか?

答えて

1

オーバーライドするメンバーの署名を変更することはできません。

しかし、あなたは、基本クラスのメンバを隠すことができnewを使用して:

public class A 
{ 
    // no 'virtual' here 
    public string Value { get; set; } 
} 

public class B : A 
{ 
    public new int Value { get; set; } 
} 

をこのアプローチは非常に混乱することができますが。

代わりに、次の操作を行うことができます:Actionから派生と違っを処理する抽象メソッドを追加します。

public class Action 
{ 
} 

public class ActionAdventure : Action 
{ 
} 

public class Base 
{ 
    private readonly List<Action> _actions = new List<Action>(); 

    public List<Action> Actions 
    { 
     get { return _actions; } 
    } 

    // call this from your code 
    protected virtual void HandleActions() 
    { 
     foreach (var action in Actions) 
     { 
     } 
    } 
} 

public class Derived : Base 
{ 
    protected override void HandleActions() 
    { 
     var adventures = Actions.OfType<ActionAdventure>(); 
     foreach (var adventure in adventures) 
     { 
     } 
    } 
} 
+0

動作するようには思えません。 'var adventures'はまだ空です。 – javurtez

関連する問題