我在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);
}
答案 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);
}
这有帮助吗?