使用事件处理程序的VB.NET到C#

时间:2016-08-10 08:42:07

标签: c# .net vb.net delegates vb.net-to-c#

大家好抱歉,但你必须一直得到这个,我试图搜索它,但找不到任何具体到我要找的东西。

基本上我完全了解VB.NET并且我经常使用它,我想要进入的是C#所以我决定利用我的空闲时间来试图抓住它。我这样做是通过使用我的一个旧的VB.NET自定义二进制对象并手动转换(不是真的使用转换器,因为我想学习它而不仅仅是转换它。)然而,我使用互联网来指导我。到目前为止,我正在尝试创建自定义甚至处理程序,我以前的VB.NET代码如下;

Public Event BeforeExecution_Handler()

但是在C#中这样做似乎有点棘手,我做了以下

public event BeforeExecution_HandlerEvent BeforeExecution_Handler;
public delegate void BeforeExecution_HandlerEvent(); 

首先,这是正确的,但其次是这里发生了什么,为什么我必须为它创建两次定义。我猜测委托部分是放置变量的地方,但为什么会这样。有人可以解释

1 个答案:

答案 0 :(得分:5)

在VB.NET中你可以隐式地创建一个委托,所以你可以这样做:

声明:

function delSel(){
    var vehicles = @Html.Raw(Json.Encode(Model.Vehicles));
    var selIDs = "";
    for(var i = 0; i < vehicles.length; i ++)
    {
        if (document.getElementById('checkbx_' + i).checked) {
            selIDs = selIDs + vehicles[i].ID + ",";
        }
    }
    document.getElementById('CRVehicleIDs').value = selIDs;
}

调用:

Public Event MsgArrivedEvent(ByVal message As String) 'behind the scenes a delegate is created for you

在C#中,您 以使用委托。

声明:

RaiseEvent MsgArrived("foo")

调用:

public delegate void MsgArrivedEventHandler(string message);
public event MsgArrivedEventHandler MsgArrivedEvent;

请注意,你也可以用与C#相同的方式显式地在VB.NET中创建一个委托,但这只是更多的输入,实际上没有任何收获:

声明:

MsgArrivedEvent("Test message");

调用:

Public Delegate Sub MsgArrivedEventHandler(ByVal message As String)
Public Event MsgArrivedEvent As MsgArrivedEventHandler

另请注意,最佳做法实际上是使用RaiseEvent MsgArrivedEvent("foo") sender类(或从其继承的类)作为Event / Delegate的参数:

EventArgs