我知道FUNC是什麼,但無法理解下面的代碼:無法理解FUNC <Type>代碼
有一個簡單的屬性:
public Func<DomainFacade> BusinessFacadeFactory { get; set; }
而且這是怎樣的性質設置:
this.BusinessFacadeFactory =() => new DomainFacade();
現在設置該屬性的這種方式,它是一個匿名方法或其他什麼東西?
我知道FUNC是什麼,但無法理解下面的代碼:無法理解FUNC <Type>代碼
有一個簡單的屬性:
public Func<DomainFacade> BusinessFacadeFactory { get; set; }
而且這是怎樣的性質設置:
this.BusinessFacadeFactory =() => new DomainFacade();
現在設置該屬性的這種方式,它是一個匿名方法或其他什麼東西?
() => new DomainFacade()
是一個lambda表達式
這是寫在地方的delegate
的編譯將其轉換爲委託實例的不願透露姓名的方法
這是真實的格式
(parameter)=>expression or a statement block
由於func
要求分配delegate
,因此我們可以編寫lambda expression
而不是delegate
,該delegate
將在內部將轉換爲轉換爲委託實例。
所以,
()
表示空參數
new DomainFacade();
是表達
在內部被轉換由編譯器
這就是所謂的lambda expression。
這是一種更簡潔的匿名方法。
() => new DomainFacade()
是λ表達式。
它是一個內聯方法,作爲委託值返回。
這是一個lambda表達式,正如其他人所說的那樣。下面是它會打破這樣的中長型:
this.BusinessFacadeFactory =() => new DomainFacade();
然後
this.BusinessFacadeFactory = new delegate(){ return new DomainFacade()};
然後
...
BusinessFacadeFactory = OnBusinessFacadeFactory;
...
private DomainFacade OnBusinessFacadeFactory()
{
return new DomainFacade()
}
這是一個lambda表達式,這是簡寫形式,創建一個匿名方法。
()
是輸入參數(即,無)
new DomainFacade();
是方法體。
好,那麼爲什麼我們要聲明的委託FUNC。如果我如上所述聲明func,我仍然可以說新的BusinessFacade或其他東西 –
Charu
@Charu你需要聲明它..如果你不那麼你怎麼定義你要連接的目標代理?方法.. – Anirudha
@Charu - 由於此方法存儲在一個變量中,因此可以將其用作任何其他方法的參數。想象一下秒錶功能。您將這個lambda/Func變量作爲參數傳遞。 Stowatch將執行它(無論是網絡下載還是3D渲染)並返回執行時間 – Ondra