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 ページでは、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>

于 2010-11-08T15:37:34.923 に答える
1

ContentControls には、本質的にデリゲートである ContentPropertyフィールドがあります。クラスは流暢なインターフェイス(本質的には Content メソッドの一部)を介してこの値を設定しますreturn this。これは開発を容易にする方法であり、それ自体に特別な関連性はありません。このデリゲートは最終的に一部である Render メソッドによって実行されます。コントロールの寿命。

見逃しているかもしれないビットは、ここでマークアップでデリゲートアクションを提供していることです。

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

アクションは、コンテンツ メソッド呼び出し内のすべてです。つまり() => { stuff }、かっこの間に引数があり、中かっこの間に関数コードがある無名関数として試して読み取る必要があります。

于 2010-11-08T15:44:19.197 に答える