2017-05-27 41 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

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