Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.NET中重写事件_.net_Vb.net_.net 2.0_Shadow_Overriding - Fatal编程技术网

在VB.NET中重写事件

在VB.NET中重写事件,.net,vb.net,.net-2.0,shadow,overriding,.net,Vb.net,.net 2.0,Shadow,Overriding,我想在VB.NET中隐藏/覆盖事件 我这样做只是因为我必须在这个对象中实现一个接口,它包含与基本对象本身相同的事件,我需要保持这个基本事件的原样,而不需要修改或补充事件添加 我怎么做 Public Shadows Event VisibleChanged As EventHandler Implements IVisibleChanged 因此,我想实现一个包含VisibleChanged事件的接口,但也要保持myBase VisibleChanged事件的功能 Public Shadow

我想在VB.NET中隐藏/覆盖事件

我这样做只是因为我必须在这个对象中实现一个接口,它包含与基本对象本身相同的事件,我需要保持这个基本事件的原样,而不需要修改或补充事件添加

我怎么做

Public Shadows Event VisibleChanged As EventHandler Implements IVisibleChanged
因此,我想实现一个包含VisibleChanged事件的接口,但也要保持myBase VisibleChanged事件的功能

  Public Shadows Event VisibleChanged As EventHandler Implements IVisibleChanged
    AddHandler(ByVal value As EventHandler)
      AddHandler MyBase.VisibleChanged, value
    End AddHandler
    RemoveHandler(ByVal value As EventHandler)
      RemoveHandler MyBase.VisibleChanged, value
    End RemoveHandler
  End Event
  Public Shadows Event VisibleChanged As EventHandler Implements IVisibleChanged
    AddHandler(ByVal value As EventHandler)
      AddHandler MyBase.VisibleChanged, value
    End AddHandler
    RemoveHandler(ByVal value As EventHandler)
      RemoveHandler MyBase.VisibleChanged, value
    End RemoveHandler
  End Event
类似这样的东西,但Visual Studio似乎不识别这样的语法

我的意思是,在C#中,我意识到它是这样的:

public new event EventHandler VisibleChanged
{
    add { base.VisibleChanged += value; }
    remove { base.VisibleChanged -= value; }
}
public new event EventHandler VisibleChanged
{
    add { base.Click += value; }
    remove { base.Click -= value; }
}
类似这样的东西,但Visual Studio似乎不识别这样的语法

我的意思是,在C#中,我意识到它是这样的:

public new event EventHandler VisibleChanged
{
    add { base.VisibleChanged += value; }
    remove { base.VisibleChanged -= value; }
}
public new event EventHandler VisibleChanged
{
    add { base.Click += value; }
    remove { base.Click -= value; }
}

在VB.NET中实现接口时,不需要将实现命名为与接口相同的名称

接口示例:

Public Interface IFoo
    Event Bar As EventHandler
End Interface
实施示例:

Public Class FooImplementation
    Implements IFoo

    ' This is the built-in Bar event, specific to this class.
    Public Event Bar As EventHandler

    ' This is the implemented IFoo.Bar event.
    Public Event IFooBar As EventHandler Implements IFoo.Bar

End Class
当某人作为IFoo附加到您时,他们将获得您的IFooBar事件:

Dim instance As IFoo = New FooImplementation()
AddHandler instance.Bar, AddressOf IFooBarHandler
当它们作为FoooBar实现连接到您时,它们将获得Bar事件,并且还能够连接到IFooBar:

Dim instance As New FooImplementation()
AddHandler instance.Bar, AddressOf BarHandler
AddHandler instance.IFooBar, AddressOf IFooBarHandler

您可以重写派生类中的处理程序吗

Public Class OverriddenClass
Inherits OriginalClass
Protected Overrides Function ProcessVisibleChanged(ByRef msg as Message, value as ...) As Boolean
  value = value + 1
  ProcessVisibleChanged = MyBase.ProcessVisibleChanged(msg, value)
  ' or use OnVisibleChanged to avoid the base handler
End Function
end class

我使用override只是因为接口的实现需要这样做。我根本不改变事件行为。我重新制定(编辑)了我的问题线索。希望这能让主题更清晰,这正是我所需要的。谢谢