2012-03-11 33 views
0

下面的代碼是從ASP.NET頁面類(使用反射)拍攝?以下文章建議應該有一個RAISE事件:http://msdn.microsoft.com/en-us/library/ms184583%28v=vs.90%29.aspx。我希望看到:.NET自定義事件

Public Custom Event InitComplete As EventHandler 
     AddHandler(ByVal value As EventHandler) 
      MyBase.Events.AddHandler(Page.EventInitComplete, value) 
     End AddHandler 
     RemoveHandler(ByVal value As EventHandler) 
      MyBase.Events.RemoveHandler(Page.EventInitComplete, value) 
     End RemoveHandler 
     Raise Event 
     End Raise Event 
    End Event 

我意識到這可能是一個基本的問題,但我相信新的自定義事件,它被證明是比我預期的更困難。

回答

0

正如我在回答您的上一個問題時所寫的那樣:這表示Page未用VB編寫。

.NET事件不必「提升」訪問器。 C#甚至沒有任何語法讓你指定一個引用訪問器。

VB,但是,確實使它成爲自定義事件的要求。這很好 - 任何由VB自定義事件生成的代碼都會有一個增加的訪問器。 VB不能強制其他語言的要求 - 所以任何有沒有提升權限的事件的代碼在VB中都沒有直接的等價關係。

將事情留給事情一分鐘 - 假設有人發明了一種名爲Humbug的新語言,它編譯爲IL。 Humbug指定擁有總是有一個getter和一個setter是可行的。你不能只寫一個getter或者只有一個setter。雖然語言必須與僅指定財產的一部分的代碼進行交互操作,但它可以針對IL。 VB或C#中的只讀(或只寫,儘管很罕見)事件中的任何代碼只會在Humbug中代表而不是

如果你可以讓你的頭腦發生變化,只需將相同的邏輯應用於事件和引發訪問者。

+0

感謝您再次回答我的問題,儘管我仍在努力理解這一點。也許我需要明天離開並看看它。我正在使用Reflector在VB.NET中查看Page類代碼。在自定義事件和結束事件之間沒有RAISE事件的地方有自定義事件。我在問題中發佈的MSDN文章說,在自定義事件和結束事件之間應該有一個RAISE事件。爲什麼沒有RAISE EVENT? – w0051977 2012-03-11 21:32:10

+0

@ w0051977:我不知道如何更清楚地說出來:** MSDN文章談論VB。 RaiseEvent只在VB中需要。它是語言特定的。** – 2012-03-11 21:33:22

+0

這個問題是關於VB.NET的。我從你所說的那裏意識到,RAISE EVENT顯然不是C#所必需的。我正在問一個VB.NET問題。我使用Reflector打開了Page類,代碼出現在VB.NET中。 InitComplete和其他事件沒有RAISE事件。再次感謝您繼續提供幫助。我剛纔在你的網站上看過你的一本書。 – w0051977 2012-03-11 21:44:07