tags:

views:

74

answers:

1

Ran into this while converting a VB.NET interface to C#; the VB version defines an event which doesn't conform to the typical (object sender, EventArgs e) signature:

VB

Public Class SomeType
    ' Does *NOT* inherit from EventArgs
End Class

Public Interface ISomething
    Public Event SomeEvent(sender as Object, value as SomeType)
End Interface

What's the C# equivalent for ISomething? My attempts so far have failed to compile:

+7  A: 

You'll need a delegate type declaration:

public delegate void SomeEventHandler(object sender, SomeType value)

public class SomeType
{
}

public interface ISomething
{
    public event SomeEventHandler SomeEvent;
}

Or in .NET 3.5 you could use the built-in Action type:

public class SomeType
{
}

public interface ISomething
{
    public event Action<object, SomeType> SomeEvent;
}
Jon Skeet
That's close to what I tried; to keep the delegate's name the same I tried declaring it within the C# interface--but it failed to compile. Is it possible to declare a delegate as part of an interface, or will the delegate have to reside outside of the interface?
STW
It'll have to be outside the interface - unlike VB, C# doesn't allow nested types within an interface (which is a pain for a few things, but never mind).
Jon Skeet