2017-02-25 49 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