Ez a feladat egyszerű volt. A .NET-es lebegőpontos számok ismerik a végtelen fogalmát, így a nullával osztás végtelent ad eredményül. Azért lesz lebegőpontos az osztás, mert a PI konstans double, így az a értéke is double lesz. A b ugyan int lesz, de a compiler átkonvertálja double-lé, mielőtt az osztást elvégezné, mivel a másik argumentum double. Miért?
A C# spec 7.3.6 Numeric promotions bekezdése alapján azt az overloadolt operátor + verziót választja ki, amelyik passzol a paraméterekre. Nincs int, dobule verzió, ezért konvertálnia kell. A double -> int nem implicit konverzió, így megpróbálkozik az int -> double-lel, azaz a második argumentumot átkonvertálja double-lé. Erre pedig már passzol a double operator +(double x, double y) overloadolt alak.
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.