C#中使用匿名函数做函数参数,求教语法含义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中使用匿名函数做函数参数,求教语法含义相关的知识,希望对你有一定的参考价值。

public partial class MainPage : UserControl,IViewBase


private MainPageViewModel _viewModel;

private IMainPageServiceProxy _proxy;

public MainPage()
InitializeComponent();

_proxy = ServiceFactory.MainPageService;

this._viewModel=new MainPageViewModel(this,_proxy,()=>this.DataContext = _viewModel;);



注意该匿名函数函数传给下面这个构造函数
public class MainPageViewModel : INotifyPropertyChanged


public MainPageViewModel(IViewBase view, IMainPageServiceProxy proxy, Action callback)



this._view = view; this._proxy = proxy; LoadTestReport(callback);


又传给下面,这传来传去里面的方法体何时执行,
public void LoadTestReport(Action callback)



_view.LoadingBegin();

this._proxy.LoadTestReport( result =>

this.TestReportDatas = result;

_view.LoadingStop();

if (callback != null)

callback();

);



又调用以下方法
public void LoadTestReport(Action<List<TestReportModel>> callback)

this.serviceClient.LoadTestReportCompleted +=

new EventHandler<LoadTestReportCompletedEventArgs>(On_LoadTestReportCompleted);

this.serviceClient.LoadTestReportAsync(callback);

void On_LoadTestReportCompleted(object sender, LoadTestReportCompletedEventArgs e)

CallbackHandlerByCatch<List<TestReportModel>>(e, new List<TestReportModel>(), () => return e.Result; , "LoadTestReport");

this.serviceClient.LoadTestReportCompleted -= On_LoadTestReportCompleted;
这个callback变量含义是啥,求教
只是想请教这些匿名函数作为参数,其函数体啥时候执行,搞不清程序执行的流程顺序

你说的那些仅仅是形式上是和委托一样,但是C#编译器在后台做了很多东西,匿名函数其实从简单的介绍的话,是没有名字的函数,更严格一些,匿名函数是闭包的一个实现,也就是C#通过兰步达表达式(匿名函数)实现了闭包,通过闭包,可以改变局部变量的声明周期,因此闭包有很多很特殊和奇妙的引用,这方面的知识你可以网上搜索一下,很多。 参考技术A 个人想法,你的btn不是孤立的,它是作为一个窗体里的对象存在的
那么你是不是可以通过btn.Form之类的方法获取到这个窗体,从而获取到窗体里的相应属性之类
如果不是公共的,可以通过反射来实现
RoutedEventHandler事件的参数是已经固定了的,就是Object sender, RoutedEventArgs e
所以你无法增加你需要的参数,
不过这个sender,就是触发事件的对象,也就是那个btn,你可以变通一下,给那个btn的某些属性赋值成你希望传递的参数,比如btn.Text = 参数
然后在:btn_Click方法里,把sender转换为btn对象,并获取text属性
参考技术B 看上去是很绕,也许是一个庞大项目的构建,但对于小项目就显得没必要了。Action<T> 的变量是一个函数参数,表示对T的类项的参数要执行什么代码。

以上是关于C#中使用匿名函数做函数参数,求教语法含义的主要内容,如果未能解决你的问题,请参考以下文章

匿名函数

函数作用域和匿名函数

在 CoffeeScript 中,如何使用匿名函数作为参数进行函数调用?

python编程_匿名函数_lambda

函数——基本语法,嵌套匿名高阶递归函数

JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用