Checking delegates for null

后端 未结 6 2007
滥情空心
滥情空心 2021-02-04 11:48

I was reading the Essential C# 3.0 book and am wondering if this is a good way to check delegates for null?:

class Thermostat
{
    public delegate void Temperat         


        
6条回答
  •  旧巷少年郎
    2021-02-04 12:45

    Original (somewhat inaccurate) Response:

    There has been much discussion on this.

    In short: you can't guarantee that the handler will be valid even by doing this copy/check for null/ execute step.

    The problem is, if OnTemperatureChange is unregistered between the time you copy it, and the time you execute the copy, then it's probably true that you don't want the listener to be executed anyway.

    You may as well just do:

    if (OnTemperatureChange != null )
    {
        OnTemperatureChange ( value );
    }
    

    And handle a null reference exception.

    I sometimes add a default handler that does nothing, just to prevent the null reference exception, but that adds performance impact quite seriously, especially in the case where there is no other handler registered.

    Update 2014-07-10:

    I defer to Eric Lippert.

    My original response did allude to using default handlers, but I didn't recommend using a temp variable, which I now agree as good practice also, per the article.

提交回复
热议问题