[英]What is C# equivalent to these VB “RaiseEvent” statements?
我在用一個字節作為arg的c#中定義事件時遇到麻煩。
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);
}
這肯定是重復的,但是以下是一些入門知識:
為此,您可以使事件使用內置的委托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);
}
有幫助嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.