gpt4 book ai didi

c# - 在运行时,C# 如何委托(delegate)定义它的访问范围?

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:01 25 4
gpt4 key购买 nike

以下代码来自 WPF 应用程序的主窗口:

public MainWindow()
{
...
Storyboard myStoryboard = new Storyboard();
...

_button.Click += delegate(object sender, RoutedEventArgs args)
{
myStoryboard.Begin(_control);
};
...
}

对象 myStoryboardMainWindow() 中本地定义。然而,按钮单击事件的未命名委托(delegate)能够访问此对象。这怎么可能?当委托(delegate)作为点击事件的结果被调用时,它的运行环境是什么?

(C# 与 Visual Studio 2010、.NET 4.0 一起提供。)

最佳答案

编译器正在创建一个额外的类型来存储局部变量。然后,方法和 lambda 表达式都使用该额外类型的实例。代码将是这样的:

public MainWindow()
{
CunningCapture capture = new CunningCapture { @this = this };
capture.myStoryboard = new Storyboard();
...

_button.Click += capture.Method;
...
}

private class CunningCapture
{
public Storyboard myStoryboard;
public MainWindow @this;

public void Method()
{
myStoryboard.Begin(@this._control);
}
}

关于c# - 在运行时,C# 如何委托(delegate)定义它的访问范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com