2012-03-11 89 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