Ответ 1
Какова цель/точка/причина, позволяющая использовать элемент языка С# без представления во время выполнения в группах CLR, подобных методам внутри такого "рабочего времени", например:?
В архиве заметок на языке не упоминается, почему было принято это решение, поэтому любая догадка в ответе будет гипотезой. Они упоминают, что если результат "есть" может быть статически определен, чтобы всегда быть истинным или ложным, чтобы он был так определен и выдавал предупреждение. Кажется правдоподобным, что это может быть просто ошибкой.
Наиболее распространенной причиной поворота того, что может быть ошибкой в предупреждении (или просто разрешении), является то, что это уменьшает нагрузку на производителей программ, которые автоматически генерируют код. Однако я не вижу здесь действительно убедительного сценария.
ОБНОВЛЕНИЕ:
Я просто проверил спецификацию С# 1.0. В нем нет этого языка. Он ничего не говорит о аргументах нулей или групп методов. И, конечно же, он ничего не говорит о преобразованиях групп методов, потому что в С# 1.0 не было неявных преобразований группы методов; вам пришлось явно называть "новый D (M)", если вы хотите преобразовать метод M для делегирования типа D.
Эта последняя точка является оправданием для "M is D" , возвращающего false, а не true; Вы не могли законно сказать "D d = M"; поэтому почему "M is D" истинно?
Конечно, в С# 2.0 это имеет меньшее значение, поскольку вы можете сказать "D d = M"; в С# 2.0.
Я также просто спросил одного из присутствующих людей, когда был разработан оператор "есть" , и он не помнил, чтобы когда-либо решал этот вопрос так или иначе. Его подозрение заключалось в том, что первоначальный дизайн оператора "есть" заключался в том, чтобы не давать никаких ошибок, только предупреждений и что весь текст в спецификации о том, что делать с группами методов и нулями, а также о том, что было добавлено после штока, для С# 2.0 версии спецификации и на основе того, что сделал на самом деле компилятор.
Короче говоря, похоже, что это была дыра в С# 1.0, которая была напечатана, когда спецификация была обновлена для С# 2.0. Это не похоже на то, что это конкретное поведение было желательным и сознательно реализовано.
Эта теория подкрепляется тем фактом, что анонимные методы вызывают ошибку при использовании в качестве аргумента для "is" в С# 2.0. Это не было бы преломлением для этого, но это было бы потрясающим изменением, чтобы заставить "M is D" внезапно начать возвращать true или быть ошибкой.
ДАЛЬНЕЙШЕЕ ОБНОВЛЕНИЕ:
Изучая это, я узнал что-то интересное. (Для меня.) Когда функция была изначально разработана, дизайн должен был либоменовать тип, либо объект Type, как правый аргумент "is". Эта идея была оставлена задолго до того, как С# 1.0 отправлен.