簡體   English   中英

相當於這些VB“ RaiseEvent”語句的C#是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM