为什么我的事件处理程序是<>c?还有,什么是<>c? [英] Why is my event handlers target <>c? Also - What even is <>c?

查看:0
本文介绍了为什么我的事件处理程序是<>c?还有,什么是<>c?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

按照specifications创建最小、完整和可验证的代码集,请参见以下内容:

using System;
using System.Data;
using System.Linq;
using System.Windows;

namespace WhatIsThis{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application {
        private void Application_Startup( object sender, StartupEventArgs e ) {
            Foo.Bar += ( S, E ) => Console.WriteLine( "Do Something!" );
        }

        protected override void OnActivated( EventArgs e ) {
            base.OnActivated( e );
            Foo.OnBar( );
        }
    }

    public static class Foo {
        private static event EventHandler _Bar;
        internal static void OnBar( ) {
            if ( _Bar != null )
                _Bar.Extension( null, EventArgs.Empty );
        }

        public static event EventHandler Bar {
            add { _Bar += value; }
            remove { _Bar -= value; }
        }

        private static void Extension(
            this EventHandler eH,
            object sender,
            EventArgs e ) {
            foreach(
                EventHandler evnt in
                    eH.GetInvocationList(
                    ).Cast<EventHandler>( ) ) {
                Console.WriteLine( evnt.Target );
                evnt( sender, e );
            }
        }
    }
}

我正在开发一个扩展来处理一些事件处理程序,我需要能够辨别事件处理程序的目标是什么(基本上,如果它是System.ComponentModel.ISynchronizeInvoke类型对象(用于处理WinForms应用程序),或者它是否是System.Windows.Threading.DispatcherObject(用于处理WPF应用程序))。

当我查看Extension方法中的evnt.Target时,我发现它是WhatIsThis.App.<>c

我尝试将其转换为几个不同的东西(包括一个操作),但结果总是为空...这是没有帮助的

这是什么对象?

推荐答案

这是什么对象?

该名称由编译器生成。我在这里发布了一些关于编译器当时使用的名称模式的注释:

Where to learn about VS debugger 'magic names'

请注意,这些内容随时可能更改,自2010年写下答案以来,我就没有更新过它。正如评论指出的那样,在那之后添加了更多神奇的名字模式。

在您的示例中,它是一个"c",它是为lambda生成的闭包类。

这篇关于为什么我的事件处理程序是&amp;lt;&amp;gt;c?还有,什么是&amp;lt;&amp;gt;c?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆