C#中的回调函数不适用于Tree Class

时间:2017-05-27 17:35:05

标签: c# lambda callback

我尝试使用Class Tree.cs到Form1.cs的接口回调函数,但它根本不执行任何操作。这是我的代码:

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);
}

1 个答案:

答案 0 :(得分:1)

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

Form1中,使用参数IOnQuery<T> queryNode<T> node创建此类事件。

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

然后,您需要使用以下代码订阅查询:

OnDataItemGet += tree.Print;

tree是您的树对象。

现在你所要做的就是让GetDataItem解雇这个事件。 您可以通过向GetDataItem添加一行来执行此操作:

OnDataItemGet?.Invoke(query, node);