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 库中使用这种语法,我知道如何实现它,但我不知道它实际上是如何工作的!

我知道在某个地方创建了一个委托并作为方法 Content 的参数提供,但找不到有关此机制或技术的任何信息。

你能启发我吗?

PS:我会根据我得到的答案更改标题。

假设当前正确答案

编译器将下面的 aspx 代码翻译成(用于理解的符号翻译):

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

非常感谢霍根!!

4

2 回答 2

1

() => { %> Some Mixed Stuff <%= Example%> Euros <% }是代表。

在 .NET aspx 页面中,%> <%(html 内容)之外的内容在output.render(string)编译 aspx 页面时被翻译成。

所以这与委托代码相同:

() => 
{ 
  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>

于 2010-11-08T15:37:34.923 回答
1

ContentControls 有一个 ContentProperty字段,它本质上是一个委托。你的类通过一个流畅的接口(本质上return this是 Content 方法的一部分)设置这个值——这只是一种使开发更容易的方式,本身没有什么超级相关的——这个委托最终将由 Render 方法执行,这是一部分的控制寿命。

您可能缺少的一点是您在此处的标记中提供了委托操作:

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

动作是内容方法调用中的所有内容,即() => { stuff }您应该尝试将其作为匿名函数读取,参数在括号之间,函数代码在大括号之间。

于 2010-11-08T15:44:19.197 回答