Why casting to object when comparing to null?

后端 未结 5 1850
故里飘歌
故里飘歌 2021-01-07 21:04

While browsing the MSDN documentations on Equals overrides, one point grabbed my attention.

On the examples of this specific page, some null checks are made, and the

5条回答
  •  半阙折子戏
    2021-01-07 21:47

    It likely exists to avoid confusion with an overloaded == operator. Imagine if the cast did not exist and the == operator was overloaded. Now the p == null line would potentially bind to the operator ==. Many implementations of operator == simply defer to the overridden Equals method. This could easily cause a stack overflow situation

    public static bool operator==(TwoDPoint left, TwoDPoint right) {
      return left.Equals(right);
    }
    
    public override bool Equals(System.Object obj) {
        ...
        TwoDPoint p = obj as TwoDPoint;
        if ( p == null ) {  // Stack overflow!!!
            return false;
        }
    
        ...
    }
    

    By casting to Object the author ensures a simple reference check for null will occur (which is what is intended).

提交回复
热议问题