В обоих С#/Java приоритет оператора is
соответственно instanceof
приводит к некоторым уродливым необходимым скобкам. Например, вместо записи if (!bar instanceof Foo)
вам нужно написать if (!(bar instanceof Foo))
.
Итак, почему языковые команды решили, что !
имеет более высокий приоритет оператора, чем /instanceof? По общему признанию, в С# вы можете перезаписать operator!
, что приведет к другому результату в некоторых ситуациях, но эти ситуации кажутся чрезвычайно редкими (и неинтуитивными в любом случае), в то время как случай проверки того, что что-то не является типом или подтипом что-то гораздо более вероятно.