Помните кое-что: C ++ - намного более сложный язык, чем C #. И хотя они могут быть похожи синтаксически, семантически они очень разные звери. Вы бы не подумали, что было бы ужасно трудно сделать подобное изменение, но я мог видеть, как это могло быть. У ANTLR есть хорошая вики-страница под названием Что делает проблему с языком трудной? Это хорошо, чтобы проконсультироваться по таким вопросам. В этом случае:
Контекстно-зависимый лексер? Вы не можете решить, с каким символом вокабуля соответствовать, если не знаете, какое предложение вы анализируете.
Теперь вместо того, чтобы беспокоиться о функциях, определенных в классах, мы должны беспокоиться о функциях, определенных вне классов. Концептуально нет большой разницы. Но с точки зрения лексизации и синтаксического анализа кода, теперь у вас есть дополнительная проблема: «если функция находится вне класса, она принадлежит этому безымянному классу. Однако, если она находится внутри класса, то она принадлежит этому». класс. "
Кроме того, если компилятор встречает метод, подобный этому:
public void Foo()
{
Bar();
}
... теперь он должен ответить на вопрос "находится ли Bar внутри этого класса или это глобальный класс?"
Прямые или внешние ссылки? Т.е. нужно несколько проходов? Паскаль имеет «прямую» ссылку для обработки внутрифайловых ссылок на процедуры, но ссылки на процедуры в других файлах с помощью предложений USES и т. Д. Требуют специальной обработки.
Это еще одна вещь, которая вызывает проблемы. Помните, что C # не требует предварительных объявлений. Компилятор сделает один проход, чтобы определить, какие классы названы и какие функции эти классы содержат. Теперь вам нужно позаботиться о поиске классов и функций, где функции могут находиться как внутри, так и снаружи класса. Об этом не нужно беспокоиться парсеру C ++, поскольку он разбирает все по порядку.
Теперь не поймите меня неправильно, вероятно, это можно сделать в C #, и я бы, вероятно, использовал такую функцию. Но стоит ли вообще преодолевать эти препятствия, когда вы можете просто ввести имя класса перед статическим методом?