Vb.net 创建接口的匿名实例

Vb.net 创建接口的匿名实例,vb.net,interface,anonymous-class,Vb.net,Interface,Anonymous Class,我是vb.net新手,有一个函数接受类型化接口,我想创建一个匿名接口实例作为方法参数 接口 我不确定我是否正确描述了我的问题,因此以下是我在Java中想要的: 接口 公共接口MessageHandler{ 公共摘要无效句柄(T消息); } 方法调用 函数(新的MessageHandler(){ 公共无效句柄(类型消息){ //做点什么 } }); 您不能在.NET中创建匿名接口实现。你必须有一个具体的实现,但是你可以很容易地隐藏它并提供同样的匿名化 我已将您的命名约定告知.NET,但具体如下

我是vb.net新手,有一个函数接受类型化接口,我想创建一个匿名接口实例作为方法参数

接口
我不确定我是否正确描述了我的问题,因此以下是我在Java中想要的:

接口
公共接口MessageHandler{
公共摘要无效句柄(T消息);
}
方法调用
函数(新的MessageHandler(){
公共无效句柄(类型消息){
//做点什么
}
});

您不能在.NET中创建匿名接口实现。你必须有一个具体的实现,但是你可以很容易地隐藏它并提供同样的匿名化

我已将您的命名约定告知.NET,但具体如下:

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
或者,在C#中:


如果你懂java,为什么不使用C而不是VB.NET呢?
public interface MessageHandler<T> {

    public abstract void handle(T message);

}
function(new MessageHandler<Type>() {

    public void handle(Type message) {
        //Do Something
    }

});
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
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);
    }
}
MessageHandler.Create(Of Integer)(Sub (x) Console.WriteLine(x)).Handle(42)