You can't create anonymous implementations of interfaces in .NET. You have to have a concrete implementation, but you can hide it an give the same kind of anonymization easily enough.
I've .NET-ified your naming conventions, but here it is:
Public Interface IMessageHandler(Of T)
Sub Handle(message As T)
End Interface
Public NotInheritable Class MessageHandler
Private Sub New()
End Sub
Private Class AnonymousMessageHandler(Of T)
Implements IMessageHandler(Of T)
Private _handler As Action(Of T)
Public Sub New(handler As Action(Of T))
_handler = handler
End Sub
Public Sub Handle(message As T) Implements IMessageHandler(Of T).Handle
Dim h = _handler
If h IsNot Nothing Then
h(message)
End If
End Sub
End Class
Public Shared Function Create(Of T)(handler As Action(Of T)) As IMessageHandler(Of T)
Return New AnonymousMessageHandler(Of T)(handler)
End Function
End Class
Or, in C#:
public interface IMessageHandler<T>
{
void Handle(T message);
}
public static class MessageHandler
{
private class AnonymousMessageHandler<T> : IMessageHandler<T>
{
private Action<T> _handler;
public AnonymousMessageHandler(Action<T> handler)
{
_handler = handler;
}
public void Handle(T message)
{
_handler?.Invoke(message);
}
}
public static IMessageHandler<T> Create<T>(Action<T> handler)
{
return new AnonymousMessageHandler<T>(handler);
}
}
You can call it (in VB.NET) like this:
MessageHandler.Create(Of Integer)(Sub (x) Console.WriteLine(x)).Handle(42)