Так же, как и C#, Dart не поддерживает элементы расширения stati c.
Причина в том, что члены расширения являются сахаром syntacti c для элементов stati c. Например, скажем, у вас есть следующее:
extension IntAdder on int {
int add(int other) => this + other;
}
Если вы хотите вызвать этот метод расширения:
var a = 5;
var b = a.add(3);
// b = 8
Компилятор берет этот код и выполняет перевод в логи c, который фактически окажется в байт-коде:
var a = 5;
// Transformed into the static equivalent, where
// "this" in the extension method becomes the value of a
var b = IntAdder.add(a, 3);
// b = 8;
Фактически, скомпилированная форма самого расширения превращается во что-то похожее на следующее:
class IntAdder {
static int add(int $this, int other) => $this + other;
}
Зная это, Как будет реализован метод расширения stati c, если метод расширения уже неявно установлен stati c? Метод «instance» легко перевести в метод stati c, но динамическая вставка элементов в сам тип в контексте stati c гораздо менее проста.
(Существует причина, по которой языки-прототипы, такие как Swift и Javascript, лучше в таких вещах, чем более объектно-ориентированные языки, такие как C# и Dart.)