2012-10-19 64 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(); 

是方法体。