我想弄清楚为什么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
{
}
}
答案 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);
}
或者只是在没有施法的情况下尝试。