Is it bad practice to write inline event handlers

前端 未结 3 1569
南方客
南方客 2021-02-04 23:17

Is it bad practice to write inline event handlers ?

For me, I prefer use it when I want to use a local variable in the event handler like the following:

I prefer

相关标签:
3条回答
  • 2021-02-04 23:46

    You put the two samples together. It is clear that the second option (which you don't prefer) is the most readable.

    Code readability and maintainability are very important. Keep things simple, as easy as possible to understand. Lambda expressions are generally considered harder to understand by majority of people. Even if they are a second nature for you for others might not.

    0 讨论(0)
  • 2021-02-04 23:48

    It's absolutely fine - although there are two caveats:

    • If you're modifying a local variable from within a closure, you should make sure you understand what you're doing.
    • You won't be able to unsubscribe from the event

    Typically I only inline really simple event handlers - for anything more involved, I use lambda expressions (or anonymous methods) to subscribe with a call to an method with a more appropriate method:

    // We don't care about the arguments here; SaveDocument shouldn't need parameters
    saveButton.Click += delegate { SaveDocument(); };
    
    0 讨论(0)
  • 2021-02-04 23:55

    In most cases I would rather have the separate methods like “timer_Tick()”, however I should rather it be called OnTimerTick() as:

    • When I read the class, it is clearer wheat is going on. The “On” tells me its can event handler.
    • It is easier to set a break point in the method in the “inline” case.
    • The event is fired a long time after “Foo” contractor has returned, and I don’t think it as running in t the scope of the contractor.

    However if the event will only be fired before the method it is declared in-line returns and the object the event is set on has a scope what that is limited to the declaring method, then I think the “in line” version is better. Hence I like using “in line” for the compare delegate being passed to a “sort” method.

    0 讨论(0)
提交回复
热议问题