C# 需要帮助来理解MVCContrib网格中的这段代码吗

C# 需要帮助来理解MVCContrib网格中的这段代码吗,c#,asp.net-mvc-4,delegates,action,C#,Asp.net Mvc 4,Delegates,Action,我对C#中的“动作”概念有点陌生,一般来说是委托 我试图研究如何在MVC中构建自定义html组件,我选择了MVCContrib的网格组件作为起点 要添加列,通常需要这样做 <%= Html.Grid(Model).Columns(column => { column.For(model => model.Date).Format("{0:d}"); column.For(model =&g

我对C#中的“动作”概念有点陌生,一般来说是委托

我试图研究如何在MVC中构建自定义html组件,我选择了MVCContrib的网格组件作为起点

要添加列,通常需要这样做

 <%= Html.Grid(Model).Columns(column =>
            {
                column.For(model => model.Date).Format("{0:d}");
                column.For(model => model.DayAmount);
                column.For(model => model.LeaveType);
            })
            %> 

{
column.For(model=>model.Date).Format(“{0:d}”);
column.For(model=>model.DayAmount);
column.For(model=>model.leveType);
})
%> 
我看到了如下列的来源

public IGridWithOptions<T> Columns(Action<ColumnBuilder<T>> columnBuilder)
        {
            var builder = new ColumnBuilder<T>();
            columnBuilder(builder);

            foreach (var column in builder)
            {
                if (column.Position == null) 
                {
                    _gridModel.Columns.Add(column);
                } 
                else
                {
                    _gridModel.Columns.Insert(column.Position.Value, column);   
                }
            }

            return this;
        }
public IGridWithOptions列(Action columnBuilder)
{
var builder=new ColumnBuilder();
专栏作家(编剧);
foreach(生成器中的var列)
{
if(column.Position==null)
{
_gridModel.Columns.Add(column);
} 
其他的
{
_gridModel.Columns.Insert(column.Position.Value,column);
}
}
归还这个;
}
我感到困惑的是这个实例中的Action参数,类型是CustomBuilder,那么“CustomBuilder”对象是什么时候被实例化的呢

我想,我可以将上面的调用语句重写为

Html.Grid(Model).Columns(delegate(CustomBuilder<T> column)
{
});
Html.Grid(Model).Columns(委托(CustomBuilder列)
{
});
或者更明确一点

Html.Grid(Model).Columns(new Action<CustomBuilder<T>>(delegate(CustomBuilder<T> column)
                      {
                      });
);
Html.Grid(Model).Columns(新操作(委托)(CustomBuilder列)
{
});
);
那么,我们是说,当使用上面的“new”关键字实例化操作时,参数“CustomBuilder”也被实例化了吗

最后,在

公共IGridWithOptions列(操作列生成器)

功能

前两行是

var builder = new ColumnBuilder<T>();
columnBuilder(builder);
var builder=new ColumnBuilder();
专栏作家(编剧);
他们是干什么的?看起来它正在实例化ColumBuilder对象,并将其作为参数传递给操作方法ColumBuilder。这是实例化参数的地方吗


谢谢大家

这与行动概念无关。
代理从一开始就存在于.net中,因此您应该从第一步开始。应在屋顶之前修建墙壁。




但是您应该了解泛型类和方法、扩展方法……

在阅读了这篇优秀的文章之后,您就知道了

在谈到Func时,这个概念适用于动作,而动作不会返回任何结果

看起来这里发生了奇迹

var builder=new ColumnBuilder(); 专栏作家(编剧)

我显然不理解委托只是一个指向函数的指针(匿名与否)。调用该参数时,仍然需要提供该参数。(Duh!)

现在一切都好了


多谢各位

谢谢你,彼得。我读了所有的文章,仍然很难在上面的具体例子中把这些点联系起来,这就是我学习的方式。无论如何,谢谢你。