铸造后无法调用方法

时间:2016-01-01 13:07:26

标签: actionscript-3 casting

我想弄清楚为什么ActionScript在投射后不会让我调用对象上的方法。

我在Array中有一组对象,所有对象都扩展了我的ActionBase类。我想通过所有这些并调用他们的step()和done()方法。

但是,当我尝试这样做时,编译器会给我一个错误:

  

错误:调用可能未定义的方法

如果我直接创建一个ActionBase对象并在其上调用这些方法,它就可以正常工作。所以我怀疑ActionScript不喜欢的投射有什么。

这是代码:

private var actionQueue:Array = new Array();
...

var action:ActionBase;

for (var i:int = 0; i < actionQueue.length; ++i)
{
    action = actionQueue[i] as ActionBase;

    if (action != null && action is ActionBase)
    {

        action.step();

        if ( action.done() )
        {

            newQueue.push(action);
        }

    }
}

通过使用扩展ActionBase的对象调用它的push()方法来追加actionQueue。我也使用FlashDevelop作为我的IDE。不确定这是否有所作为。

我的ActionBase类:

public class ActionBase 
{
    public function ActionBase() 
    {

    }

    public function done():Boolean
    {
        return true;
    }

    public function step():void
    {
    }
}

3 个答案:

答案 0 :(得分:0)

将方法从私有更改为公共可能非常简单。 (虽然没有亲自尝试,但由于声誉水平,抱歉不能写评论。)

答案 1 :(得分:0)

您的示例代码看起来很好,您的ActionBase类和Array(actionQueue)赋值是什么样的?

this

剪切/粘贴示例:

actionQueue[actionQueue.length] = new ActionBase();

答案 2 :(得分:0)

你的对象是动画片吗?

您是否尝试将ActionBase设置为对象的基类?

或尝试像这样投射:

private void button_Click(object sender, RoutedEventArgs e) { string lb1 = ""; string lb = ""; //Removes listboxtitem object name ListBoxItem mySelectedItem0 = listBox.SelectedItem as ListBoxItem; ListBoxItem mySelectedItem1 = listBox1.SelectedItem as ListBoxItem; if (mySelectedItem0 != null && mySelectedItem1 != null) { lb1 = mySelectedItem1.Content.ToString(); lb = mySelectedItem0.Content.ToString(); } TextWriter saveText = new StreamWriter(@"D:\blah.txt"); saveText.Write("===================================[Receipt]===================================" + "\r\n"); saveText.Write("|Title:" + " " + comboBox.Text + "\r\n"); saveText.Write("|Surname:" + " " + textBox1.Text + "\r\n"); saveText.Write("|Forname:" + " " + textBox2.Text + "\r\n"); saveText.Write("|Passanger[s]:" + " " + textBox6.Text + "\r\n"); saveText.Write("|Group:" + " " + checkBox.IsChecked + " " + "No: " + textBox4.Text + "\r\n"); saveText.Write("|Class:" + " " + comboBox1.Text + "\r\n"); saveText.Write("|Luggage:" + " " + textBox7.Text + "\r\n"); saveText.Write("|Suitcase:" + " " + checkBox1.IsChecked + " " + "No: " +textBox5.Text + "\r\n"); saveText.Write("|Departure On:" + " " + DatePicker.Text + " " + "At:" + " " +comboBox2.Text + "\r\n"); saveText.Write("|Destination From:" + " " + lb + " " + "To:" + " " + lb1 + "\r\n"); saveText.Write("===================================[Receipt]==================================="); saveText.Close(); File.AppendAllText(@"D:\blah.txt", Environment.NewLine); }

或者只是在没有施法的情况下尝试。

相关问题