Ответ 1
Ниже приведен код, но есть некоторые важные концепции, которые нужно иметь в виду.
Статический метод не существует ни в одном экземпляре. Для этого есть веские причины:
- Его можно вызвать до того, как вы создали
new
экземпляр - Его можно вызвать извне, поэтому вы не знаете, к какому экземпляру вызов был связан с
Поэтому во всех случаях, когда вы вызываете статический метод, вам нужно использовать полное имя:
Test.aStaticFunction();
Если статический метод должен вызвать метод экземпляра, вам нужно передать это. Это, однако, заставляет меня тревожить звонки. Если статический метод зависит от метода экземпляра, он, вероятно, не должен быть статическим методом.
Чтобы понять, что я имею в виду, подумайте об этой проблеме.
Если я вызову Test.aStaticFunction()
извне экземпляра, когда было создано 100 экземпляров, какой экземпляр должен использовать статическую функцию? Невозможно сказать. Если ваш метод должен знать данные из экземпляра или методов вызова в экземпляре, он почти наверняка не должен быть статическим.
Поэтому, хотя приведенный ниже код работает, это, вероятно, не совсем то, что вам нужно - вам, вероятно, нужно удалить static
ключевое слово и убедиться, что у вас есть экземпляр для вызова в других классах.
interface IHasMemberFunction {
aMemberFunction(): void;
}
class Test {
public static aStaticFunction(aClass: IHasMemberFunction):void {
aClass.aMemberFunction();
}
private aMemberFunction():void {
Test.aStaticFunction(this);
}
}
class Another {
private anotherMemberFunction():void {
Test.aStaticFunction(new Test());
}
}