2009-09-16 23 views
2

任何人都可以向我解釋下面的C#代碼行嗎?C#委託問題 - 這段代碼幹什麼?

public event EventHandler<DataEventArgs<BusinessEntities.Employee>> EmployeeSelected = delegate { }; 

這真的讓我難倒位爲年底delegate { }件。對於更多的情況下,從ViewInjection樣品中的EmployeesListView.xaml.cs樣品附帶PRISM 2.完整的類定義如下:

/// <summary> 
/// Interaction logic for EmployeesListView.xaml 
/// </summary> 
public partial class EmployeesListView : UserControl, IEmployeesListView 
{ 
    public EmployeesListView() 
    { 
     InitializeComponent(); 
    } 

    public ObservableCollection<BusinessEntities.Employee> Model 
    { 
     get { return this.DataContext as ObservableCollection<BusinessEntities.Employee>; } 
     set { this.DataContext = value; } 
    } 

    public event EventHandler<DataEventArgs<BusinessEntities.Employee>> EmployeeSelected = delegate { }; 

    private void EmployeesList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.AddedItems.Count > 0) 
     { 
      BusinessEntities.Employee selected = e.AddedItems[0] as BusinessEntities.Employee; 
      if (selected != null) 
      { 
       EmployeeSelected(this, new DataEventArgs<BusinessEntities.Employee>(selected)); 
      } 
     } 
    } 
} 

回答

16

該位:

delegate {} 

只是創建一個適當類型的「無操作」代表。然後該委託被分配給該事件的支持變量。這是避免在引發事件時必須執行空檢查的簡單方法 - 您總是至少有一個處理程序,它是無操作程序處理程序。

這意味着,這個代碼可以是簡單的:

EmployeeSelected(this, new DataEventArgs<BusinessEntities.Employee>(selected)); 

相反的:

EventHandler<DataEventArgs<BusinessEntities.Employee>> handler =EmployeeSelected; 
if (handler != null) 
{ 
    handler(this, new DataEventArgs<BusinessEntities.Employee>(selected)); 
} 
+3

在我們公司,我們稱之爲「空委派模式」 – 2009-09-16 14:04:55

0

它是將其設置爲一個什麼也不做基本上是一個匿名方法。爲什麼我不確定,也許是爲了避免支票或其他東西,但我會認爲這很sl。。

+3

它只是空對象模式 - 我不明白爲什麼你認爲這是馬虎。 – 2009-09-16 10:19:17