我知道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