2010-11-08 24 views
1

这里是一片类:流利的控制写作:了解尖括号翻译

public class OneControl 
{ 
    ... 

    public OneControl Content(Action value) { 
     ContentProperty = value; 
     return this; 
    } 

    public void Render() 
    { 
     ContentProperty(); 
    } 

    ... 
} 

然后,我在我的观点得到了这个:

<div id="pleaseHelpMe"> 
    <% OneControlInstance.Content(() => { %> 
     Some Mixed Stuff <%= Example%> Euros 
    <% }).Render() %> 
</div> 

我想用这个语法在我的UI库,我知道如何实现这一点,但我不知道它是如何实际工作!

我明白,有些地方,有些委托是创建和提供作为方法内容的参数,但无法找到任何有关此mecanism或技术的信息。

你能微启我吗?

PS:我会根据anwser我得到更改标题。

假定的当前正确答案

编译器把下面的代码ASPX成(象征性的翻译理解):

<div id="pleaseHelpMe"> 
    <% OneControlInstance.Content(() => { 
     ViewPageInstance.Response.Write("Some Mixed Stuff "); 
     ViewPageInstance.Response.Write(Example); 
     ViewPageInstance.Response.Write(" Euros"); 
    }).Render() %> 
</div> 

非常感谢霍根!

+1

这是一堂美味的课程。 – annakata 2010-11-08 15:31:37

回答

1

() => { %> Some Mixed Stuff <%= Example%> Euros <% }是委托人。

在编译aspx页面时,在一个.NET aspx页面外的东西%> <%(html东西)被翻译成output.render(string)

因此,这是一样的委托代码:

() => 
{ 
    output.render(" Some Mixed Stuff "); 
    output.render(Example); 
    output.render(" Euros "); 
} 

此前评论:

不知道你是问。 Action value是代表。从文档:

http://msdn.microsoft.com/en-us/library/018hxwa8.aspx

“封装具有单个参数,并且没有返回值的方法。”

“您可以使用Action(<T>)委托传递的方法作为参数没有明确声明自定义委托。”


如果你希望你的委托返回一个值,你可以使用TResult Func<in T, out TResult>

1

ContentControls有ContentProperty field其本质上是一种委托。你的类通过fluent interface(本质上是Content方法的return this部分)设置这个值 - 这只是一种简化开发的方法,本身没有什么超级相关性 - 而且这个代表将通过Render方法执行,它是的控制寿命。

您可能忽略的一点是,你在你的标记这里提供委托action

<% OneControlInstance.Content(() => { %> 
     Some Mixed Stuff <%= Example%> Euros 
    <% }).Render() %> 

的作用是内容的方法调用里面的一切,即() => { stuff }你shoudl尝试为已读一个匿名函数,在括号之间的parens和函数代码之间带有参数。

+0

我明白这一点,但是谁将%> Html的内容<%转换为代表?它是视图引擎吗?编译器? – Kronos 2010-11-08 15:48:37

+0

'()=> {%>一些混合的东西<%= Example%>欧元<%}'是委托。在编译aspx页面时,在'%><%'之外的.NET页面内容(html内容)被转换为output.render(string)。所以这和委托代码一样:'()=> {output.render(“some mixed stuff”); output.render(实施例); output.render(“Euros”); }' – Hogan 2010-11-08 17:21:22

+0

好的,我明白你的意思了,真好!不过我认为这个解释来自视图引擎。 – Kronos 2010-11-08 18:24:41