2017-05-27 68 views
0

我试图将类Tree.cs中的接口回调函数用于Form1.cs,但它根本不执行任何操作。这里是我的代码:C#中的回调函数无法与树类一起工作

在Tree.cs函数

public void Print(IOnQuery<T> query,Node<T> node) 
{ 
     if (node == null) node = Top; 
     if (node.Left != null) 
     { 
      Print(query,node.Left); 
      query.GetDataItem(node); 
     } 
     else 
     { 
      query.GetDataItem(node); 
     } 

     if (node.Right != null) 
     { 
      Print(query,node.Right); 
     } 
} 

Form1.cs的

public partial class Form1 : Form, IOnQuery<Car> 
{ 

    public void GetDataItem(Node<Car> node) 
    { 
     listBox1.Items.Add(node.Item.ToString()); 
    } 

} 

我的接口类

public interface IOnQuery<T> 
{ 
    void GetDataItem(Node<T> node); 
} 
+0

你怎么叫'Print'树: 你可以通过添加一行GetDataItem做到这一点?请显示你的代码。 – CodingYoshi

回答

1

如果每次调用GetDataItem时都想要发生Print,则可以使用事件。

Form1中,使用参数IOnQuery<T> queryNode<T> node创建一个类似的事件。

public event Action<IOnQuery<T>, Node<T>> OnDataItemGet; 

然后,你需要订阅查询的代码,如:

OnDataItemGet += tree.Print; 

哪里tree是你的树对象。

现在你所要做的就是让GetDataItem开火。

OnDataItemGet?.Invoke(query, node); 
+0

我真的很感激!非常感谢! –