2011-06-06 43 views
6

看着System.Windows.Threading.Dispatcher(由Reflector反編譯)我遇到了;這是什麼? [field:SecurityCritical]

[field: SecurityCritical] 
public event DispatcherUnhandledExceptionFilterEventHandler UnhandledExceptionFilter; 

我不承認屬性聲明的'field'部分,它是什麼?

編輯:

這是怎麼出現在引用來源:

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

回答

3

field:被稱爲屬性目標。它可以讓你指定屬性的目標(彙編,返回等)。

請參閱http://msdn.microsoft.com/en-us/library/b3787ac0.aspx瞭解更多詳情。

+0

反對票的流動,這實際上回答了我的問題是什麼是'領域',你在亞歷克斯之前,所以你贏了:) – Grokodile 2011-06-06 00:58:32

+0

@panamack - 不知道'亞歷克斯'是指我,但我回答第一。如果你將鼠標懸停在「X小時前回答」上,你會看到確切的時間戳。比較時間戳。 – 2011-06-06 16:18:34

+0

@亞歷山大,享受你的道德勝利; p。 – Grokodile 2011-06-06 18:13:22

3

的屬性目標的語法如下:

[target : attribute-list] 

如果目標是一個如下所示:程序集,字段,事件,方法,模塊,參數,屬性,返回,類型。

你可以找到這裏可能的目標的完整列表:Disambiguating Attribute Targets

SecurityCritical不能被應用到該事件。但它可以應用於後臺EventHanlder字段。

6

這只是意味着它將屬性應用於支持事件的委託,而不是事件本身。

就像屬性的語法是怎樣的簡寫,代碼

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聲明,但我認爲有。

+0

是的,我剛剛查看了參考源,並且該屬性實際上應用於添加和刪除訪問器。 – Grokodile 2011-06-06 00:36:59

+0

@ panamack:等等,什麼?它應用於訪問器,還是應用於該領域? – Mehrdad 2011-06-06 00:37:32

+0

@Mehrdad,看我的編輯 – Grokodile 2011-06-06 00:38:55

1

當您爲事件聲明屬性時,可以選擇將屬性應用於事件本身,也可以應用於將事件委託保存到生成的addremove方法的字段。說明符field表示該屬性應用於該字段。

請參閱MSDN上的Disambiguating Attribute Targets以及this question