什么';这是吗?[字段:SecurityCritical]

本文关键字:字段 SecurityCritical 什么 | 更新日期: 2023-09-27 17:58:23

查看系统。Windows。线程。Dispatcher(由Reflector反编译)我遇到了;

[field: SecurityCritical]
public event DispatcherUnhandledExceptionFilterEventHandler UnhandledExceptionFilter;

我不认识属性声明的"字段"部分,它是什么?

编辑:

这就是它在参考来源中的表现:

    public event DispatcherUnhandledExceptionFilterEventHandler UnhandledExceptionFilter
    { 
        [SecurityCritical] 
        [UIPermissionAttribute(SecurityAction.LinkDemand,Unrestricted=true)]
        add 
        {
            _unhandledExceptionFilter += value;
        }
        [SecurityCritical] 
        [UIPermissionAttribute(SecurityAction.LinkDemand,Unrestricted=true)]
        remove 
        { 
            _unhandledExceptionFilter -= value;
        } 
    }

什么';这是吗?[字段:SecurityCritical]

这只是意味着它将属性应用于支持事件的委托,而不是事件本身。

就像属性语法是一种简写一样,代码

event MyDelegate MyEvent;

实际上是的简写

MyDelegate _BackingDelegate;
event MyDelegate MyEvent
{
    add { lock (this._BackingDelegate) this._BackingDelegate += value; }
    remove { lock (this._BackingDelegate) this._BackingDelegate -= value; }
}

IIRC*,并且该属性适用于_BackingDelegate而不是MyEvent

*注意:我不确定是否有lock语句,但我认为有。

field:被称为属性目标。它允许您指定属性的目标(汇编、返回等)。

请参阅http://msdn.microsoft.com/en-us/library/b3787ac0.aspx了解更多详细信息。

属性目标的语法如下:
[target : attribute-list]

其中,target是以下内容之一:程序集、字段、事件、方法、模块、参数、属性、返回、类型。

你可以在这里找到可能目标的完整列表:消除属性目标的歧义

SecurityCritical不能应用于事件。但它可以应用于支持EventHanlder字段。

当您为事件声明属性时,您可以选择将该属性应用于事件本身,或应用于保存事件对生成的addremove方法的委托的字段。说明符field表示该属性应用于字段。

请参阅MSDN上的消除属性目标的歧义以及此问题。