2012-10-19 60 views
1

我知道FUNC是什麼,但無法理解下面的代碼:無法理解FUNC <Type>代碼

有一個簡單的屬性:

public Func<DomainFacade> BusinessFacadeFactory { get; set; } 

而且這是怎樣的性質設置:

this.BusinessFacadeFactory =() => new DomainFacade(); 

現在設置該屬性的這種方式,它是一個匿名方法或其他什麼東西?

回答

3

() => new DomainFacade()是一個lambda表達式

這是寫在地方的delegate編譯將其轉換爲委託實例的不願透露姓名的方法

這是真實的格式

(parameter)=>expression or a statement block

由於func要求分配delegate,因此我們可以編寫lambda expression而不是delegate,該delegate將在內部將轉換爲轉換爲委託實例。

所以,

()表示空參數

new DomainFacade();是表達

在內部被轉換由編譯器

+0

好,那麼爲什麼我們要聲明的委託FUNC 。如果我如上所述聲明func,我仍然可以說新的BusinessFacade或其他東西 – Charu

+0

@Charu你需要聲明它..如果你不那麼你怎麼定義你要連接的目標代理?方法.. – Anirudha

+0

@Charu - 由於此方法存儲在一個變量中,因此可以將其用作任何其他方法的參數。想象一下秒錶功能。您將這個lambda/Func變量作爲參數傳遞。 Stowatch將執行它(無論是網絡下載還是3D渲染)並返回執行時間 – Ondra

1

() => new DomainFacade()λ表達式
它是一個內聯方法,作爲委託值返回。

1

這是一個lambda表達式,正如其他人所說的那樣。下面是它會打破這樣的中長型:

this.BusinessFacadeFactory =() => new DomainFacade(); 

然後

this.BusinessFacadeFactory = new delegate(){ return new DomainFacade()}; 

然後

... 
BusinessFacadeFactory = OnBusinessFacadeFactory; 
... 

private DomainFacade OnBusinessFacadeFactory() 
{ 
    return new DomainFacade() 
} 
1

這是一個lambda表達式,這是簡寫形式,創建一個匿名方法。

() 

是輸入參數(即,無)

new DomainFacade(); 

是方法體。