什么是C#相当于这些VB" RaiseEvent"声明?

时间:2018-04-11 00:09:42

标签: c# events syntax

我在c#中定义一个以字节为arg的事件时遇到了问题。

Public Event LowOnFuel(ByVal FuelLevel As Byte)
...
...

public byte Drive()
{

If mFuelLevel < 30 And mFuelLevel > 0 Then _
RaiseEvent LowOnFuel(mFuelLevel)
}

这是我想出的:

public event LowOnFuelHandler LowOnFuel;
public delegate void LowOnFuelHandler(byte fuelLevel);
...
...
if (mFuelLevel < 30 && mFuelLevel > 0)
{
    LowOnFuel?.Invoke(mFuelLevel);
}

1 个答案:

答案 0 :(得分:1)

这一定肯定是重复的,但这里有一些东西让你开始:

为此,您可以创建使用内置委托Func或Action的事件。

如果您需要返回结果,请使用Func<T>

如果您不需要返回任何内容,请使用Action<T>作为活动。

如果您不需要传递任何内容,请使用Action(无尖括号)作为事件。

它们中的任何一个都可以采用多个参数 - 只需在签名中声明它们。

我从Jon Skeet那里了解了在声明期间附加空委托的技巧,以避免在代码中稍后测试空值。这是完全没必要的,特别是因为原子空测试现在比过去容易得多,但仍然......

您无需声明您的委托 - 只需在活动中注册即可。

    //public event LowOnFuelHandler LowOnFuel;
    //public delegate void LowOnFuelHandler(byte fuelLevel);
    public event Action<byte> LowOnFuelEvent = delegate { };
    ...
    ...
    LowOnFuelEvent += LowOnFuelHandler;  // the actual method must match the delegate signature
    ...
    ...
    if (mFuelLevel < 30 && mFuelLevel > 0)
    {
        LowOnFuelEvent(mFuelLevel);
    }

这有帮助吗?